<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.kolmisoft.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin</id>
	<title>Kolmisoft Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.kolmisoft.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Admin"/>
	<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php/Special:Contributions/Admin"/>
	<updated>2026-06-13T04:39:04Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=Webhooks&amp;diff=31670</id>
		<title>Webhooks</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=Webhooks&amp;diff=31670"/>
		<updated>2026-06-11T13:55:34Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Call End Webhook */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MOR and M4 can send **outbound HTTP POST** requests to URLs you configure when certain events occur. There are two delivery formats:&lt;br /&gt;
&lt;br /&gt;
* '''Query-string webhooks''' — HTTP POST with an '''empty body'''; event data is appended to your configured URL as query string parameters (Call End, Warning Balance).&lt;br /&gt;
* '''JSON webhooks''' — HTTP POST with a '''JSON body''' and &amp;lt;code&amp;gt;Content-Type: application/json&amp;lt;/code&amp;gt; (Alerts).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Webhook type !! Product !! When it fires !! Request format&lt;br /&gt;
|-&lt;br /&gt;
| Call End || MOR || A completed call whose source device has a webhook URL || POST, empty body, query string&lt;br /&gt;
|-&lt;br /&gt;
| Warning Balance || MOR || User balance drops below the configured admin warning threshold || POST, empty body, URL built from template&lt;br /&gt;
|-&lt;br /&gt;
| Alert / Clear || MOR, M4 || An alert is raised or cleared, and the matching notify option is enabled || POST, JSON body&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Call End Webhook ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
* '''Per device:''' Device edit → Advanced → '''Webhook URL for Call End''' (field &amp;lt;code&amp;gt;webhook_url_for_call_end&amp;lt;/code&amp;gt;).&lt;br /&gt;
* '''Default for new devices:''' SETTINGS → Default Device → same field.&lt;br /&gt;
* '''Legacy API write:''' [[MOR API]] [[MOR API device update]] parameter &amp;lt;code&amp;gt;webhook_url_for_call_end&amp;lt;/code&amp;gt; (not included in hash). An empty value clears the URL.&lt;br /&gt;
* '''Legacy API read:''' [[MOR API device details get]] tag &amp;lt;code&amp;gt;webhook_url_for_call_end&amp;lt;/code&amp;gt;.&lt;br /&gt;
* URL must start with &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== When it fires ===&lt;br /&gt;
&lt;br /&gt;
* MOR checks for newly completed calls approximately every '''10 seconds'''.&lt;br /&gt;
* Only calls where the '''source device''' has a non-empty webhook URL are considered.&lt;br /&gt;
* Only calls with &amp;lt;code&amp;gt;calltime&amp;lt;/code&amp;gt; within the last '''~2 hours''' are eligible.&lt;br /&gt;
* On first use, delivery starts from the current newest call — '''historical calls are not sent'''.&lt;br /&gt;
* After a restart, MOR resumes from the last successfully delivered call instead of skipping or re-sending older calls.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Request format ===&lt;br /&gt;
&lt;br /&gt;
* '''Method:''' HTTP POST&lt;br /&gt;
* '''Body:''' empty&lt;br /&gt;
* '''Parameters:''' query string on the configured URL&lt;br /&gt;
&lt;br /&gt;
If your base URL already contains query parameters (for example, &amp;lt;code&amp;gt;https://example.com/hook?api_key=secret&amp;lt;/code&amp;gt;), MOR merges call parameters with &amp;lt;code&amp;gt;&amp;amp;&amp;lt;/code&amp;gt; (single &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt;). Parameter values are URL-encoded.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;user_id&amp;lt;/code&amp;gt; || User id associated with the call&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;device_id&amp;lt;/code&amp;gt; || Source device id&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;calltime&amp;lt;/code&amp;gt; || Call date/time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; || Caller source&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; || Destination&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hangupcause&amp;lt;/code&amp;gt; || Hangup cause code&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;billsec&amp;lt;/code&amp;gt; || Billed seconds&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;call_price&amp;lt;/code&amp;gt; || Call price in the user's currency&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;balance_at_the_end_of_call&amp;lt;/code&amp;gt; || User balance in the user's currency at send time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;currency&amp;lt;/code&amp;gt; || User currency code (for example &amp;lt;code&amp;gt;USD&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;EUR&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
Bare base URL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;http://192.168.1.142:8080/test?user_id=2&amp;amp;device_id=80&amp;amp;calltime=2026-06-11+10%3A00%3A00&amp;amp;src=101&amp;amp;dst=123123&amp;amp;hangupcause=16&amp;amp;billsec=50&amp;amp;call_price=5&amp;amp;balance_at_the_end_of_call=100&amp;amp;currency=USD&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Base URL with existing query parameter:&lt;br /&gt;
&lt;br /&gt;
* Configured: &amp;lt;code&amp;gt;http://192.168.1.142:8080/test?api_key=mytoken&amp;lt;/code&amp;gt;&lt;br /&gt;
* Sent: &amp;lt;code&amp;gt;http://192.168.1.142:8080/test?api_key=mytoken&amp;amp;user_id=2&amp;amp;device_id=80&amp;amp;...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Limitations ===&lt;br /&gt;
&lt;br /&gt;
* Only the '''source''' device webhook URL is used (not the destination device).&lt;br /&gt;
* Delivery is '''not real-time''' at hangup — expect up to ~10 seconds polling delay.&lt;br /&gt;
* Call-end and warning-balance webhooks are delivered through the same outbound notification pipeline.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Wiki paste — Webhooks: URL encoding and calltime&lt;br /&gt;
&lt;br /&gt;
**Status:** Section patch — insert on existing page **Webhooks** on wiki.kolmisoft.com.&lt;br /&gt;
&lt;br /&gt;
**Page title:** `Webhooks`&lt;br /&gt;
&lt;br /&gt;
**Verified links:** none required in this fragment (host page is Webhooks).&lt;br /&gt;
&lt;br /&gt;
**Placement:** Under `== Call End Webhook ==`, after the parameter table in `=== Request format ===` and **before** `=== Examples ===`.&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== URL encoding (query parameters) ===&lt;br /&gt;
&lt;br /&gt;
MOR sends call-end data as a query string on your configured URL. Each parameter '''name''' and '''value''' is URL-encoded so that reserved characters do not break the request.&lt;br /&gt;
&lt;br /&gt;
'''Why you may see &amp;lt;code&amp;gt;%3A&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;%2B&amp;lt;/code&amp;gt; in &amp;lt;code&amp;gt;calltime&amp;lt;/code&amp;gt;'''&amp;lt;br&amp;gt;&lt;br /&gt;
The &amp;lt;code&amp;gt;calltime&amp;lt;/code&amp;gt; value is an ISO 8601 date/time, for example &amp;lt;code&amp;gt;2026-06-11T13:36:03.000+00:00&amp;lt;/code&amp;gt;. In a query string, characters such as colons and plus signs must be encoded:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Encoded sequence !! Character !! Typical role in &amp;lt;code&amp;gt;calltime&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%3A&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt; || Separates hours, minutes, and seconds (for example &amp;lt;code&amp;gt;13%3A36%3A03&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;%2B&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; || Starts a numeric UTC offset (for example &amp;lt;code&amp;gt;%2B00%3A00&amp;lt;/code&amp;gt; for UTC)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A full encoded &amp;lt;code&amp;gt;calltime&amp;lt;/code&amp;gt; may look like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;calltime=2026-06-11T13%3A36%3A03.000%2B00%3A00&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After URL decoding, that is the same instant as &amp;lt;code&amp;gt;2026-06-11T13:36:03.000+00:00&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Decoding on your server'''&amp;lt;br&amp;gt;&lt;br /&gt;
Use your platform’s standard URL-decoding for query parameters (for example, &amp;lt;code&amp;gt;urllib.parse.parse_qs&amp;lt;/code&amp;gt; in Python, &amp;lt;code&amp;gt;parse_str&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;urldecode&amp;lt;/code&amp;gt; in PHP, or framework request helpers). Do not treat the raw query substring as a plain timestamp without decoding.&lt;br /&gt;
&lt;br /&gt;
'''Why the plus sign is encoded'''&amp;lt;br&amp;gt;&lt;br /&gt;
In application/x-www-form-urlencoded query strings, an unencoded &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; is often interpreted as a space. Encoding &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; as &amp;lt;code&amp;gt;%2B&amp;lt;/code&amp;gt; keeps the timezone offset intact.&lt;br /&gt;
&lt;br /&gt;
'''UTC with a &amp;lt;code&amp;gt;Z&amp;lt;/code&amp;gt; suffix (equivalent form)'''&amp;lt;br&amp;gt;&lt;br /&gt;
MOR sends &amp;lt;code&amp;gt;calltime&amp;lt;/code&amp;gt; in ISO 8601 with a numeric timezone offset (for example &amp;lt;code&amp;gt;...+00:00&amp;lt;/code&amp;gt;), which produces &amp;lt;code&amp;gt;%2B&amp;lt;/code&amp;gt; in the encoded URL. The same UTC instant can also be written with a trailing &amp;lt;code&amp;gt;Z&amp;lt;/code&amp;gt; (for example, &amp;lt;code&amp;gt;2025-11-04T22:52:23Z&amp;lt;/code&amp;gt;). That form is shorter and would avoid &amp;lt;code&amp;gt;%2B&amp;lt;/code&amp;gt;, but colons still encode as &amp;lt;code&amp;gt;%3A&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;calltime=2025-11-04T22%3A52%3A23Z&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When decoding, treat &amp;lt;code&amp;gt;Z&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;+00:00&amp;lt;/code&amp;gt; as the same UTC offset.&lt;br /&gt;
&lt;br /&gt;
'''Other parameters'''&amp;lt;br&amp;gt;&lt;br /&gt;
The same encoding rules apply to all call-end query parameters (for example, &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;currency&amp;lt;/code&amp;gt;). Only values that contain reserved characters will show percent-escapes in the logged URL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Warning Balance Webhook ==&lt;br /&gt;
&lt;br /&gt;
MOR-only. See [[Warning balance]] for the full feature (email, audio announcement, scheduling).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
On '''[[User Details]]''' (user edit), in the Warning Balance section:&lt;br /&gt;
&lt;br /&gt;
* Enable '''Active''' for Warning Balance.&lt;br /&gt;
* Set '''Send warning when balance drops lower than''' thresholds (including the admin threshold that triggers the webhook).&lt;br /&gt;
* Check '''Admin Webhook''' and set the webhook URL on the same row (&amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt; required).&lt;br /&gt;
* The webhook is '''not tied to email''' — it can run with webhook only (Active enabled, threshold and URL set) even if email notifications are disabled.&lt;br /&gt;
* Admin Webhook fields are available from an admin or accountant account editing the user.&lt;br /&gt;
&lt;br /&gt;
The URL is a '''template''': MOR substitutes [[Email variables]] into the URL the same way as email bodies (for example, &amp;lt;code&amp;gt;https://example.com/hook?user=&amp;lt;%= username %&amp;gt;&amp;amp;balance=&amp;lt;%= balance %&amp;gt;&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== When it fires ===&lt;br /&gt;
&lt;br /&gt;
* Fires when the same conditions that send the '''admin''' Warning Balance email are met (user balance below the admin warning threshold).&lt;br /&gt;
* Warning Balance checks run on an '''hourly''' schedule — delivery may lag briefly after the balance crosses the threshold.&lt;br /&gt;
* If '''Every day at''' is selected for Warning Balance email timing, the webhook follows that schedule as well (not on every balance change).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Request format ===&lt;br /&gt;
&lt;br /&gt;
* '''Method:''' HTTP POST&lt;br /&gt;
* '''Body:''' empty&lt;br /&gt;
* '''URL:''' rendered from the configured Admin Webhook URL template after variable substitution&lt;br /&gt;
&lt;br /&gt;
Common variables include &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;balance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;nice_balance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;warning_email_balance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;nice_warning_email_balance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;currency&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;user_id&amp;lt;/code&amp;gt;. See [[Email variables]] for the full list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
Configured URL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://example.com/warning?user=&amp;lt;%= username %&amp;gt;&amp;amp;balance=&amp;lt;%= balance %&amp;gt;&amp;amp;currency=&amp;lt;%= currency %&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sent request (POST to rendered URL, empty body):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://example.com/warning?user=john&amp;amp;balance=4.50&amp;amp;currency=USD&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Alert Webhooks ==&lt;br /&gt;
&lt;br /&gt;
When an alert is '''raised''' or '''cleared''', MOR/M4 can POST a JSON notification to every contact in the alert's notification group that has a non-empty '''Webhook URL'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== MOR configuration ===&lt;br /&gt;
&lt;br /&gt;
# Contacts — set '''Webhook URL''' per contact: '''ADDONS → Monitorings → Contacts''' ([[Alert Contacts]]).&lt;br /&gt;
# Groups — assign contacts to a group: '''ADDONS → Monitorings → Groups''' ([[Alert Groups]]).&lt;br /&gt;
# Alerts — on alert edit ([[Alerts]]):&lt;br /&gt;
#* '''Group to Notify''' — select the contact group.&lt;br /&gt;
#* '''Notify On Alert via Webhook''' — send webhook when the alert is raised.&lt;br /&gt;
#* '''Notify On Clear via Webhook''' — send webhook when the alert is cleared.&lt;br /&gt;
&lt;br /&gt;
See [[Monitorings Addon]] and [[Alerts]] for alert parameters, clear rules, and examples.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== M4 configuration ===&lt;br /&gt;
&lt;br /&gt;
Same webhook payload as MOR. Configuration paths on M4:&lt;br /&gt;
&lt;br /&gt;
# Contacts — set '''Webhook URL''' on each alert contact (see [[M4 Alerts]]).&lt;br /&gt;
# Alerts — under '''SECURITY → Alerts''' ([[M4 Alerts]]):&lt;br /&gt;
#* '''Group to Notify''' — select the contact group.&lt;br /&gt;
#* '''Notify On Alert via Webhook''' / '''Notify On Clear via Webhook''' — same options as MOR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== When it fires ===&lt;br /&gt;
&lt;br /&gt;
* '''ALERT''' — when the alert condition is met and '''Notify On Alert via Webhook''' is enabled on that alert.&lt;br /&gt;
* '''CLEAR''' — when the alert clears and '''Notify On Clear via Webhook''' is enabled on that alert.&lt;br /&gt;
* One HTTP request is sent to '''each''' contact in the selected group whose '''Webhook URL''' is non-empty.&lt;br /&gt;
* Contact webhook URLs must start with &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Request format ===&lt;br /&gt;
&lt;br /&gt;
* '''Method:''' HTTP POST&lt;br /&gt;
* '''Content-Type:''' &amp;lt;code&amp;gt;application/json&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Body:''' JSON object&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || Trigger type: &amp;lt;code&amp;gt;ALERT&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;CLEAR&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;group_id&amp;lt;/code&amp;gt; || Alert group id&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;alert_id&amp;lt;/code&amp;gt; || Alert id&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;alert_name&amp;lt;/code&amp;gt; || Alert name&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;object_id&amp;lt;/code&amp;gt; || Id of the monitored object&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;object_name&amp;lt;/code&amp;gt; || Human-readable object name&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;cause&amp;lt;/code&amp;gt; || Alert parameter / cause (for example &amp;lt;code&amp;gt;CALLS TOTAL&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; || Current measured value (number)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt; || Data count (integer)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;timestamp&amp;lt;/code&amp;gt; || Date/time when the alert or clear triggered (&amp;lt;code&amp;gt;YYYY-MM-DD HH:MM:SS&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Example payload ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;ALERT&amp;quot;,&lt;br /&gt;
  &amp;quot;group_id&amp;quot;: 12,&lt;br /&gt;
  &amp;quot;alert_id&amp;quot;: 42,&lt;br /&gt;
  &amp;quot;alert_name&amp;quot;: &amp;quot;Test&amp;quot;,&lt;br /&gt;
  &amp;quot;object_id&amp;quot;: 123,&lt;br /&gt;
  &amp;quot;object_name&amp;quot;: &amp;quot;Example OP&amp;quot;,&lt;br /&gt;
  &amp;quot;cause&amp;quot;: &amp;quot;CALLS TOTAL&amp;quot;,&lt;br /&gt;
  &amp;quot;value&amp;quot;: 150.0,&lt;br /&gt;
  &amp;quot;count&amp;quot;: 150,&lt;br /&gt;
  &amp;quot;timestamp&amp;quot;: &amp;quot;2026-02-26 12:34:56&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[Alerts]] — MOR alert configuration and examples&lt;br /&gt;
* [[M4 Alerts]] — M4 alert configuration&lt;br /&gt;
* [[Warning balance]] — Warning Balance email, audio, and scheduling&lt;br /&gt;
* [[Alert Contacts]] — contact webhook URLs for MOR alerts&lt;br /&gt;
* [[Alert Groups]] — group contacts for alert notifications&lt;br /&gt;
* [[Email variables]] — template variables for Warning Balance webhook URLs&lt;br /&gt;
* [[MOR API device update]] — set &amp;lt;code&amp;gt;webhook_url_for_call_end&amp;lt;/code&amp;gt; via API&lt;br /&gt;
* [[MOR API device details get]] — read &amp;lt;code&amp;gt;webhook_url_for_call_end&amp;lt;/code&amp;gt;&lt;br /&gt;
* [[MOR API]] — legacy API overview&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_device_update&amp;diff=31669</id>
		<title>MOR API device update</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_device_update&amp;diff=31669"/>
		<updated>2026-06-11T13:28:28Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Description=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!---This functionality is available from MOR X4---&amp;gt;&lt;br /&gt;
[[MOR API]] update existing Device from params. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
* Call: /api/device_update&lt;br /&gt;
* Methods: POST, GET(if allowed, not recomended)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
Parameters which are '''included''' into hash:&lt;br /&gt;
&lt;br /&gt;
* '''device''' - device_id. '''Required'''.&lt;br /&gt;
* '''authentication''' - 0 stands for &amp;quot;Dynamic (Username/Password)&amp;quot; Device Authentication, 1 stands for &amp;quot;IP Authentication:&amp;quot;&lt;br /&gt;
* '''username''' - sets value for Username if device Authentication value is Dynamic. &amp;lt;!--su #12727 ticketu apdaryta kad sitas apram veiktu ir su username ir su device_name parametrais---&amp;gt;&lt;br /&gt;
* '''host''' - sets value for IP Address if device Authentication value is IP Authentication&lt;br /&gt;
* '''port''' - sets value for Port if device Authentication value is IP Authentication&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note that parameters are shown in the same order as they have to be when generating the hash. Last parameter in a row is API_Secret_Key'''&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Parameters which are '''not included''' into hash:&lt;br /&gt;
* '''[[MOR API hash construction | hash]]''' - SHA1 hash constructed using '''parameters''' which are listed above. Note that parameters are shown in the same order as they have to be when generating the hash. Last parameter in a row is '''API_Secret_Key''' ([[MOR API hash construction | More described in Constructing hash]]). '''Required'''.&amp;lt;br&amp;gt;&lt;br /&gt;
* '''u''' - username for authentication. '''Required'''.&lt;br /&gt;
* '''new_location_id''' - location_id.&lt;br /&gt;
&amp;lt;!--FROM MOR X5---&amp;gt;&lt;br /&gt;
* '''callerid_number''' - number.&lt;br /&gt;
* '''callerid_name''' - name.&lt;br /&gt;
&amp;lt;!--FROM MOR X6---&amp;gt;&lt;br /&gt;
* '''trunk''' - 0 stand for &amp;quot;No&amp;quot;, 1 stand for &amp;quot;Yes&amp;quot;, 2 stands for &amp;quot;Yes with ANI&amp;quot;.&lt;br /&gt;
* '''fax_email_add''' - email address to add.&lt;br /&gt;
* '''fax_email_delete''' - email address to delete.&lt;br /&gt;
* '''call_limit''' - call limit. Set 0 if you want unlimited sim. calls.&lt;br /&gt;
* '''inbound_call_limit''' - call limit. Set 0 if you want unlimited inbound calls.&lt;br /&gt;
* '''fromuser''' - sets value for Fromuser.&lt;br /&gt;
* '''password''' - sets value for Password if device Authentication value is Dynamic.&lt;br /&gt;
* '''call_timeout''' - max call duration (in seconds).&lt;br /&gt;
* '''extension''' - device extension. Allowed symbols: a-z0-9#*.&lt;br /&gt;
* '''pin''' - device PIN. Allowed symbols: 0-9 or empty parameter.&lt;br /&gt;
* '''hidden''' - for hiding and unhiding Devices. Allowed values: 0 - unhide, 1 - hide.&lt;br /&gt;
* '''language''' - sets value for language. &lt;br /&gt;
&amp;lt;!--FROM MOR X12---&amp;gt;&lt;br /&gt;
* '''allow_empty_callerid''' - if set to 1, allows to set empty callerid_number and/or callerid_name. &lt;br /&gt;
* '''comment''' - device comment to add or update.&lt;br /&gt;
&amp;lt;!--FROM MOR X13---&amp;gt;&lt;br /&gt;
* '''encryption''' - enable or disable encryption. Allowed values: 1 - yes, 0 - no.&lt;br /&gt;
* '''transport''' - allowed values: &amp;quot;'''udp'''&amp;quot;, &amp;quot;'''tcp'''&amp;quot;, &amp;quot;'''udp,tcp'''&amp;quot;, &amp;quot;'''tcp,udp'''&amp;quot;, &amp;quot;'''tls'''&amp;quot;.&lt;br /&gt;
&amp;lt;!--FROM MOR X14--&amp;gt;&lt;br /&gt;
* '''hostname''' - set device hostname, will take effect only if authentication = 1 (IP authenticated device).&lt;br /&gt;
* '''device_balance_enabled''' - enable or disable device balance. Allowed values: 1 - enable, 0 - disable.&lt;br /&gt;
* '''balance''' - set device balance. Only numeric values.&lt;br /&gt;
&amp;lt;!--FROM MOR X16--&amp;gt;&lt;br /&gt;
* '''ringing_timeout''' - max ringing duration in seconds (minimum value is 10).&lt;br /&gt;
* '''callerid_control_by_dids''' - 1 - enable, 0 - disable. Only available when the device has DIDs and the CallerID Number field is empty.&lt;br /&gt;
* '''callerid_random_number_from_dids''' - 1 - enable, 0 - disable. Use a random DID assigned to this device for CallerID.&lt;br /&gt;
'''Note''' that there is a parameter '''callerid_control_by_dids''', so if you want to enable one of them, send the parameter only for one of them. You do not need to send one request to disable and another to enable.&lt;br /&gt;
* '''voicemail_email''' - VoiceMail email address. To read back email, password, timezone, and delete-after-send in one call, use [[MOR API device details get]] — response tags &amp;lt;code&amp;gt;voicemail_email&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;voicemail_password&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;voicemail_tz&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;voicemail_delete&amp;lt;/code&amp;gt; (password, timezone, and delete are GUI-only on update).&lt;br /&gt;
* '''description''' - updates device description field.&lt;br /&gt;
* '''progressinband''' - allowed values: &amp;quot;'''No'''&amp;quot;, &amp;quot;'''Yes'''&amp;quot;, &amp;quot;'''Never'''&amp;quot;.&lt;br /&gt;
&amp;lt;!--FROM MOR X17 --&amp;gt;&lt;br /&gt;
* '''emergency_callerid''' - number for Emergency callerID.&lt;br /&gt;
* '''emergency_callerid_pool_id''' - Id of Emergency CallerID Number Pool&lt;br /&gt;
* '''sendrpid''' - yes, no (SIP)&lt;br /&gt;
* '''t38_support''' - no, yes, fec, redundancy and none (SIP and FAX, same as GUI)&lt;br /&gt;
* '''сopy_legA_name_to_LegB_number''' - 0,1 (SIP)&lt;br /&gt;
&amp;lt;!--FROM MOR X18 --&amp;gt;&lt;br /&gt;
* '''total_call_limit''' - one concurrent Call Limit (Outbound + Inbound). If the request uses call_limit and inbound_call_limit together with total_call_limit, then total_call_limit will be used.&lt;br /&gt;
* '''valid_cid_number_pool_id''' - Number Pool with valid CallerIDs.&lt;br /&gt;
* '''fake_number_pool_id''' - Random Number from Number Pool.&lt;br /&gt;
'''Note''': It should be taken into account that '''Use random Number when CallerID is invalid''' is not stored in the database. The option is '''on''' when both '''number_pools''' ('''valid_cid_number_pool_id''' and '''fake_number_pool_id''') are set. If they are not set, both '''number_pool''' parameters must be specified the first time to save the values. Other times, the parameters can be specified separately.&lt;br /&gt;
To disable the option '''Use random Number when CallerID is invalid''' it is required to send '''-1''' with parameters '''valid_cid_number_pool_id''' or '''fake_number_pool_id'''.&amp;lt;br&amp;gt;&lt;br /&gt;
Example: '''valid_cid_number_pool_id=-1'''.&lt;br /&gt;
* '''trunk_3cx''' - Enable 3CX option. This setting is meaningful only if the '''trunk''' parameter is set to 1 or 2.&lt;br /&gt;
* '''nat''' - available options &amp;quot;'''no'''&amp;quot;, &amp;quot;'''force_rport,comedia'''&amp;quot; (which is &amp;quot;'''yes'''&amp;quot; in GUI), &amp;quot;'''force_rport'''&amp;quot;, &amp;quot;'''comedia'''&amp;quot;.&lt;br /&gt;
* '''qualify''' - 1 - enable, 0 - disable. Works only for SIP/PJSIP devices.&lt;br /&gt;
* '''qualify_timeout''' - value &amp;gt;= 500 in ms.&lt;br /&gt;
* '''qualify_frequency''' - value &amp;gt;= 10 in seconds. Works only for PJSIP devices.&lt;br /&gt;
* '''media_use_received_transport''' - Optional. Allowed values: &amp;lt;code&amp;gt;yes&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;no&amp;lt;/code&amp;gt;. Works only when the device uses SIP with the PJSIP driver (&amp;lt;code&amp;gt;chan_pjsip&amp;lt;/code&amp;gt;). When &amp;lt;code&amp;gt;yes&amp;lt;/code&amp;gt;, Asterisk sets &amp;lt;code&amp;gt;media_use_received_transport&amp;lt;/code&amp;gt; on the endpoint so the media transport from the received SDP offer is echoed in the answer (useful for DTLS-SRTP / [[WebRTC|WebRTC]] and some NAT scenarios). Invalid values are ignored; the column is unchanged. Not available on device_create — new devices inherit the Default Device template and TLS auto-default rules instead. Response field on [[MOR API device details get|device_details_get]]: &amp;lt;code&amp;gt;pjsip_endpoint_media_use_received_transport&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''custom_sip_header''' - Custom SIP header for SIP devices. Format is &amp;lt;code&amp;gt;header: value&amp;lt;/code&amp;gt; (example: &amp;lt;code&amp;gt;x-My-Custom-Header: my value&amp;lt;/code&amp;gt;). An empty parameter clears the stored value. Maximum 255 characters. Read back with [[MOR API device details get]] tag &amp;lt;code&amp;gt;custom_sip_header&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''webhook_url_for_call_end''' - Webhook URL for Call End notifications for this device. Must start with &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt; when non-empty. Empty parameter clears the stored value. Applies to all device types. Read back with [[MOR API device details get]] tag &amp;lt;code&amp;gt;webhook_url_for_call_end&amp;lt;/code&amp;gt;. See [[Webhooks]] for delivery format and trigger semantics.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Additional feature''' &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If the API setting '''Allow Resellers to use Admin Localization Rules''' is enabled:&amp;lt;br&amp;gt;Reseller is able to set a location inherited from Admin. '''new_location_id''' should be used as a parameter for location.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Request===&lt;br /&gt;
&lt;br /&gt;
 HTML POST: http://&amp;lt;SERVER_IP&amp;gt;/billing/api/device_update?u=admin&amp;amp;device=2&amp;amp;new_location_id=7&amp;amp;hash=297dab8c386794b2e947d52affb8f576c643569e&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
&lt;br /&gt;
'''Success'''&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;page&amp;gt;&lt;br /&gt;
   &amp;lt;status&amp;gt;&lt;br /&gt;
     &amp;lt;success&amp;gt;Device successfully updated&amp;lt;/success&amp;gt;&lt;br /&gt;
   &amp;lt;/status&amp;gt;&lt;br /&gt;
 &amp;lt;/page&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
'''Errors'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;error&amp;gt;Incorrect hash&amp;lt;/error&amp;gt; - Hash was not correct. Check API_Secret_Key and order or params while concatenating hash_string.&lt;br /&gt;
* &amp;lt;error&amp;gt;Access Denied&amp;lt;/error&amp;gt; - access not allowed&lt;br /&gt;
* &amp;lt;error&amp;gt;Device was not found&amp;lt;/error&amp;gt; - Device id incorrect or does not exist&lt;br /&gt;
* &amp;lt;error&amp;gt;Location was not found&amp;lt;/error&amp;gt; - Location id incorrect or does not exist&lt;br /&gt;
* &amp;lt;error&amp;gt;Password is too short&amp;lt;/error&amp;gt; - Password of device is too short&lt;br /&gt;
* &amp;lt;error&amp;gt;CallerID Control By DIDs was not updated because the device has callerID number&amp;lt;/error&amp;gt;&lt;br /&gt;
* &amp;lt;error&amp;gt;CallerID Control By DIDs was not updated because the device is not assigned to any DID&amp;lt;/error&amp;gt;&lt;br /&gt;
* &amp;lt;error&amp;gt;Wrong format of VoiceMail Email address&amp;lt;/error&amp;gt; &lt;br /&gt;
* &amp;lt;error&amp;gt;Emergency CallerID was not updated. Number Pool was not found&amp;lt;/error&amp;gt;&lt;br /&gt;
* &amp;lt;error&amp;gt;Emergency CallerID Number Pool was not updated. Emergency CallerID must be present&amp;lt;/error&amp;gt;&lt;br /&gt;
* &amp;lt;error&amp;gt;Emergency CallerID Number Pool was not updated. Number Pool was not found&amp;lt;/error&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
Change Username/Password authenticated Device to IP authenticated Device:&lt;br /&gt;
 http://&amp;lt;SERVER_IP&amp;gt;/billing/api/device_update?u=admin&amp;amp;device=51&amp;amp;authentication=1&amp;amp;host=192.168.5.20&amp;amp;port=5060&amp;amp;hash=XXXX&lt;br /&gt;
&lt;br /&gt;
Set empty CallerID:&lt;br /&gt;
 http://&amp;lt;SERVER_IP&amp;gt;/billing/api/device_update?u=admin&amp;amp;device=2&amp;amp;allow_empty_callerid=1&amp;amp;callerid_number=&amp;amp;hash=XXXX&lt;br /&gt;
&lt;br /&gt;
=See also=&lt;br /&gt;
&lt;br /&gt;
* [[MOR API]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=Warning_balance&amp;diff=31668</id>
		<title>Warning balance</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=Warning_balance&amp;diff=31668"/>
		<updated>2026-06-11T13:25:21Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* From Admin Account */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Description=&lt;br /&gt;
&lt;br /&gt;
This function allows a number of actions to be taken when a user's balance drops lower than the set value.&lt;br /&gt;
&lt;br /&gt;
You can edit '''Warning Balance''' in [[User Details]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== From Admin Account ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Warning balance user edit.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check '''Active''' to activate this function. &lt;br /&gt;
&amp;lt;!---Admin and Accountant are able to get warning emails from MOR X5---&amp;gt;&lt;br /&gt;
Upon activation, the User, Admin, and Responsible Accountant will receive an email when the User's balance drops lower than the balance set in the fields after: '''Send warning when balance drops lower than'''.&lt;br /&gt;
&lt;br /&gt;
Select when to send such an email and for whom:&lt;br /&gt;
&lt;br /&gt;
* '''Only once when balance drops lower than''' – email will be sent only once when the balance drops lower than the defined value.&lt;br /&gt;
* '''Every day at''' – an email will be sent every day at a selected time (in the user's time zone) while the balance is lower than the defined value.&lt;br /&gt;
&lt;br /&gt;
Additionally, you can play an audio message whenever the user makes a call if the balance drops below the setup Warning Balance.&lt;br /&gt;
&lt;br /&gt;
Check '''Play before every call''' and select the audio file to play.&lt;br /&gt;
&lt;br /&gt;
'''Play when balance drops lower than''' lets to set the balance limit for the above option.&lt;br /&gt;
&lt;br /&gt;
Use this with caution - not many users will like this!&lt;br /&gt;
&lt;br /&gt;
* '''Warning Balance Email''' – This Email is used as a primary email to send the Warning Balance email. If this email is empty '''Email''' in the Registration Address section is used.&lt;br /&gt;
&lt;br /&gt;
* '''Admin Webhook''' – together with the Warning Balance email, a request is sent to the specified URL with data according to the URL config. Webhook URL: '''http://''' or '''https://''' required. The webhook is not tied to email. It can work without email. Just enable &amp;quot;Active&amp;quot;, specify values ​​and the Webhook URL.&lt;br /&gt;
** More info: [[Webhooks]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== From Reseller Account ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Warning_balance_user_edit_from_reseller.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check '''Active''' to activate this function. &lt;br /&gt;
&lt;br /&gt;
Upon activation, the User and Reseller will receive an email when the User's balance drops lower than the balance set in the fields after: '''Send warning when balance drops lower than'''.&lt;br /&gt;
&lt;br /&gt;
Select when to send such an email and for whom:&lt;br /&gt;
&lt;br /&gt;
* '''Only once when balance drops lower than''' – email will be sent only one time when balance drops lower than defined value.&lt;br /&gt;
* '''Every day at''' – email will be sent every day at a selected time (in user's time zone),  while the balance is lower than defined value.&lt;br /&gt;
&lt;br /&gt;
Additionally, you can play an audio message whenever the user makes a call if the balance drops below the setup Warning Balance.&lt;br /&gt;
&lt;br /&gt;
Check '''Play before every call''' and select the audio file to play.&lt;br /&gt;
&lt;br /&gt;
Use this with caution - not many users will like this!&lt;br /&gt;
&lt;br /&gt;
* '''Warning Balance Email''' – This Email is used as a primary email to send the Warning Balance email. If this email is empty '''Email''' in the Registration Address section is used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Other notes=&lt;br /&gt;
&lt;br /&gt;
*Emails are sent hourly that means that it might take some time for you to receive an email after the balance drops.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[User Details]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=M4_Alerts&amp;diff=31667</id>
		<title>M4 Alerts</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=M4_Alerts&amp;diff=31667"/>
		<updated>2026-06-11T13:24:50Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Webhook notifications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Description=&lt;br /&gt;
&lt;br /&gt;
Alerts is located under '''SECURITY -&amp;gt; Alerts'''&lt;br /&gt;
&lt;br /&gt;
Alerts functionality is dedicated to taking action about your system issues that may cause a problem. For example, you may block a User, disable Origination/Termination Point or simply send a notification to a specified [[Alert Groups|Group]] of [[M4 Alert Contacts|Contacts]]. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==Parameters==&lt;br /&gt;
&lt;br /&gt;
You are able to follow these parameters:&lt;br /&gt;
&lt;br /&gt;
* [[ASR/ACD|ASR]] – Answer-Seizure Ratio (percent)&lt;br /&gt;
* [[ASR/ACD|ACD]] – Average Call Duration (in seconds)&lt;br /&gt;
* PDD – Average Post Dial Delay. The time between punching in the last digit of a telephone number and receiving a ring or busy signal (in seconds)&lt;br /&gt;
* TTC (Time to Connect)(DURATION-BILLSEC) – Average time between receiving a ring signal and answer to the call (in seconds)&lt;br /&gt;
* BILLSEC – Sum of calls billsec (in seconds)&lt;br /&gt;
* TOTAL CALLS – Sum of all calls.&lt;br /&gt;
* ANSWERED CALLS – Sum of answered calls.&lt;br /&gt;
* NOT ANSWERED CALLS – Sum of not answered calls (FAILED, BUSY, NO ANSWER).&lt;br /&gt;
* SIMULTANEOUS CALLS – Number of simultaneous calls (only applies to users and providers).&lt;br /&gt;
* PRICE SUM – Sum of calls price (only applies to users and providers).&lt;br /&gt;
* HGC (ABSOLUTE) – Number of calls terminated with this [[M4 Hangupcause Codes|HGC]].&lt;br /&gt;
* HGC (PERCENT) – Percentage of calls terminated with this [[M4 Hangupcause Codes|HGC]].&lt;br /&gt;
&lt;br /&gt;
And it is possible to take action for these types of M4 Objects or send a notification about it:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Object Types ==&lt;br /&gt;
&lt;br /&gt;
* [[M4 Users|Client]]&lt;br /&gt;
** All&lt;br /&gt;
** One Client (User)&lt;br /&gt;
* [[M4 Termination Points | Termination Points]]&lt;br /&gt;
** All Termination Points&lt;br /&gt;
** One Termination Point for a specific User&lt;br /&gt;
* [[M4 Origination Points | Origination Points]]&lt;br /&gt;
** All Origination  Points&lt;br /&gt;
** One Origination  Point for a specific User&lt;br /&gt;
* [[Directions and Destinations | Destinations]]&lt;br /&gt;
** One Destination by a prefix.&lt;br /&gt;
** Few Destinations by prefix and % sign. Eg. 93%, 3706%, and so on.&lt;br /&gt;
* [[Destinations Groups]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==Primary and Secondary Object==&lt;br /&gt;
&lt;br /&gt;
If the Primary Object is an Origination or Termination point, it is possible to select a Secondary Object. The secondary Object's Type can be only Destination or Destination Group. This allows selecting only a specific Destination or Destination Group for a particular Termination/Origination Point.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==User to Notify==&lt;br /&gt;
&lt;br /&gt;
When the Object Type is a ''' Client''' you have the option to Notify User(s) by email.&lt;br /&gt;
An email goes to one of the preset email addresses: &lt;br /&gt;
&lt;br /&gt;
* Usually email is sent to '''NOC email''' address. &lt;br /&gt;
* If '''NOC email''' address is not set, email is sent to '''Main email''' address. &lt;br /&gt;
* If '''Main email''' address is not set, email is sent to '''Billing email''' address. &lt;br /&gt;
* If '''Billing email''' address is not set, email is sent to '''Rates email''' address. &lt;br /&gt;
* If none of the NOC, Main, Billing, or Rates email is set, no Alert notification email will be sent.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=Settings=&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==General==&lt;br /&gt;
&lt;br /&gt;
[[File:M4_alerts_edit_general.png]]&lt;br /&gt;
&lt;br /&gt;
* '''Alert Name''' – name of Alert.&lt;br /&gt;
* '''Primary Object''' - Primary Object to observe. All alerts must have a Primary Object.&lt;br /&gt;
* '''Object Type''' – select [[M4_Alerts#Object_Types|Object Type]] to observe for Primary Object.&lt;br /&gt;
* '''Object Name''' – specify name/prefix of Primary Object (fields depend on selected Object Type)&lt;br /&gt;
* '''Secondary Object''' - Secondary Object to observe. Only Available if Primary Object's Type is Termination Point or Origination Point. Secondary Object act as the Destination/Destination Group filter for the Primary Object.&lt;br /&gt;
* '''Object Type''' – select Object Type to observe for Secondary Object. Available types are Destination and Destination Group.&lt;br /&gt;
* '''Object Name''' – specify name/prefix of Secondary Object.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* '''Parameter''' – choose which parameter should be followed.&lt;br /&gt;
* '''Check last''' – the time period to check.&lt;br /&gt;
'''NOTE''': Object Type, Object Name, and Parameter cannot be changed once Alert is created. &lt;br /&gt;
* '''Ignore if Calls (in 1 h)''' &amp;lt;= – indicate calls sum when the system should ignore Alert if calls sum in one hour is less than written (if 0, Alert will not be ignored). &lt;br /&gt;
* '''Ignore if Calls (in 1 h)''' &amp;gt;= – indicate calls sum when the system should ignore Alert if calls sum one hour is more than written (if 0, Alert will not be ignored). &lt;br /&gt;
* '''Group to Notify''' – select [[Alert Groups|Group]] of [[Alert Contacts|Contacts]] who should be informed about Alert/clear.&lt;br /&gt;
* '''Notify to User''' – it is available only when the Alert object type is Client or Origination/Termination Point. Check if you want to notify the User on Alert. More information available [[M4_Alerts#User_to_Notify|here]].&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Alert==&lt;br /&gt;
&lt;br /&gt;
[[File:M4_alerts_edit_alert.png]]&lt;br /&gt;
&lt;br /&gt;
* '''Alert if &amp;lt;=''' - triggers the alert when the observed parameter drops below the given value.&lt;br /&gt;
* '''Alert if &amp;gt;=''' - triggers the alert when the observed parameter raises above the given value.&lt;br /&gt;
* '''Disable Primary Object''' - disables the observed primary object when an alert is triggered. NOT available for Destinations and Destination Group-type objects.&lt;br /&gt;
* '''Disable TP in Dial Peer''' - disables the selected Termination Point when an alert is triggered (only available when observing the Termination Point object). This option does not have any effect when &amp;quot;Disable Primary Object&amp;quot; is enabled.&lt;br /&gt;
*''' Routing Group''' - sets the provided Routing Group for the observed object (only available when observing [[M4 Origination Points | Origination Points]])&lt;br /&gt;
* '''Deactivate DP in RG:''' - deactivates selected [[M4 Dial Peers|Dial Peer]] in Origination Point's Routing Group (only available when observing [[M4 Origination Points | Origination Points]])&lt;br /&gt;
* '''Notify On Alert via Email''' - sends a notification email when an alert is triggered.&lt;br /&gt;
* '''Notify On Alert via Webhook''' - when set, the alert will send a webhook to all Contacts in Alert Group that have non-empty Webhook URL. More info [https://wiki.kolmisoft.com/index.php/M4_Alerts#Webhook_notifications here].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Clear==&lt;br /&gt;
&lt;br /&gt;
[[File:M4_alerts_edit_clear.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* '''Disable Clear''' - disables clearing indefinitely. The changes triggered by the alert can be changed manually.&lt;br /&gt;
* '''Clear on Condition'''&lt;br /&gt;
** '''Clear if &amp;lt;=''' - clears the alert when the observed parameter drops below the given value.&lt;br /&gt;
** '''Clear if &amp;gt;=''' - clears the alert when the observed parameter rises above the given value.&lt;br /&gt;
*''' Clear on time basis'''&lt;br /&gt;
** '''Clear after''' - clears the alert after a given period of time. (The period is set once the alert is triggered)&lt;br /&gt;
** '''Clear on Date''' - clears the alert on the given date.&lt;br /&gt;
* '' 'Enable Primary Object''' - enables the Primary Object once the alert is cleared. Only available if '''Disable Primary Object''' is selected in the Alerts section.&lt;br /&gt;
* '''Enable TP in Dial Peer''' - enables Termination Point to be used again in the corresponding Dial Peer (only available when observing Termination Point object).&lt;br /&gt;
* '''Routing Group''' - sets the provided Routing Group for the observed object(only available when observing [[M4 Origination Points | Origination Points]])&lt;br /&gt;
* '''Activate DP in RG:''' - activates Dial Peer in Routing Group (the one disabled in '''Deactivate DP in RG:''' setting on Alert section). Only available when observing [[M4 Origination Points | Origination Points]].&lt;br /&gt;
* '''Notify On Clear via Email''' - sends a notification email when an alert is cleared.&lt;br /&gt;
* '''Notify On Clear via Webhook''' - when set, the alert will send a webhook to all Contacts in Alert Group that have non-empty Webhook URL. More info [https://wiki.kolmisoft.com/index.php/M4_Alerts#Webhook_notifications here].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Webhook notifications =&lt;br /&gt;
&lt;br /&gt;
When an alert is raised or cleared and options '''Notify On Alert via Webhook''' or '''Notify On Clear via Webhook''' in the Alert are enabled, a HTTP request will be sent to each Contact in the Alert Group that has '''Webhook''' URL set. The request uses HTTP POST with JSON payload (Content-Type: application/json).&lt;br /&gt;
&lt;br /&gt;
JSON Payload:&lt;br /&gt;
&lt;br /&gt;
* '''type''' - Alert trigger type, either &amp;quot;ALERT&amp;quot; or &amp;quot;CLEAR&amp;quot;.&lt;br /&gt;
* '''group_id''' - Alert Group ID.&lt;br /&gt;
* '''alert_id''' - Alert ID.&lt;br /&gt;
* '''alert_name''' - Alert name.&lt;br /&gt;
* '''object_id''' - ID of checked Object.&lt;br /&gt;
* '''object_name''' - human-readable Object name.&lt;br /&gt;
* '''cause''' - Alert type.&lt;br /&gt;
* '''value''' - current value.&lt;br /&gt;
* '''count''' - data count.&lt;br /&gt;
* '''timestamp''' - timestamp when Alert/Clear triggered.&lt;br /&gt;
&lt;br /&gt;
Example payload:&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;type&amp;quot;: &amp;quot;ALERT&amp;quot;,&lt;br /&gt;
   &amp;quot;group_id&amp;quot;: 12,&lt;br /&gt;
   &amp;quot;alert_id&amp;quot;: 42,&lt;br /&gt;
   &amp;quot;alert_name&amp;quot;: &amp;quot;Test&amp;quot;,&lt;br /&gt;
   &amp;quot;object_id&amp;quot;: 123,&lt;br /&gt;
   &amp;quot;object_name&amp;quot;: &amp;quot;Example OP&amp;quot;,&lt;br /&gt;
   &amp;quot;cause&amp;quot;: &amp;quot;CALLS TOTAL&amp;quot;,&lt;br /&gt;
   &amp;quot;value&amp;quot;: 150.0,&lt;br /&gt;
   &amp;quot;count&amp;quot;: 150,&lt;br /&gt;
   &amp;quot;timestamp&amp;quot;: &amp;quot;2026-02-26 12:34:56&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
More info: [[Webhooks]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
===Block Termination Point for 1 hour if ACD during last 24h drops below 120 seconds===&lt;br /&gt;
&lt;br /&gt;
Primary Object, Object Type: Termination Point&lt;br /&gt;
&lt;br /&gt;
Object name: select a specific Termination Point&lt;br /&gt;
&lt;br /&gt;
Parameter: ACD&lt;br /&gt;
&lt;br /&gt;
Check Last: 24h&lt;br /&gt;
&lt;br /&gt;
Ignore if Calls (in 24 h) &amp;lt;=: 50&lt;br /&gt;
&lt;br /&gt;
Alert if ASR &amp;lt;=: 120&lt;br /&gt;
&lt;br /&gt;
Disable Primary Object: checked&lt;br /&gt;
&lt;br /&gt;
Disable Clear: unchecked&lt;br /&gt;
&lt;br /&gt;
Clear on a time basis, Clear after 60 minutes&lt;br /&gt;
&lt;br /&gt;
Enable Primary Object: checked&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=See also=&lt;br /&gt;
&lt;br /&gt;
* [[M4 Alert Contacts]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=Alerts&amp;diff=31666</id>
		<title>Alerts</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=Alerts&amp;diff=31666"/>
		<updated>2026-06-11T13:24:32Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Webhook notifications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Description=&lt;br /&gt;
&amp;lt;!---This functionality is available from MOR X4---&amp;gt;&lt;br /&gt;
Alerts functionality is dedicated to taking actions about your system issues which may cause a problem. You may block User, disable Provider, change LCR for User or simply send a notification to specified [[Alert Groups|Group]] of [[Alert Contacts|Contacts]]. &lt;br /&gt;
&lt;br /&gt;
You are able to follow these parameters:&lt;br /&gt;
&lt;br /&gt;
* [[ASR/ACD|ASR]] – Answer-Seizure Ratio (percent)&lt;br /&gt;
* [[ASR/ACD|ACD]] – Average Call Duration (in seconds)&lt;br /&gt;
* PDD – Average Post Dial Delay. The time between punching in the last digit of a telephone number and receiving a ring or busy signal (in seconds)&lt;br /&gt;
* TTC (Time to Connect)(DURATION-BILLSEC) – Average time between receiving a ring signal and answer to the call (in seconds)&lt;br /&gt;
* BILLSEC – Sum of calls bilsec (in seconds)&lt;br /&gt;
* TOTAL CALLS – Sum of all calls.&lt;br /&gt;
* TOTAL OUTGOING CALLS – Sum of outgoing calls.&lt;br /&gt;
* ANSWERED CALLS – Sum of answered calls.&lt;br /&gt;
* NOT ANSWERED CALLS – Sum of not answered calls (FAILED, BUSY, NO ANSWER).&lt;br /&gt;
* SIMULTANEOUS CALLS – Number of simultaneous calls (only applies to users and providers).&lt;br /&gt;
* PRICE SUM – Sum of calls price (only applies to users and providers).&lt;br /&gt;
* HGC (absolute) – Sum of calls, which ended with a specific [[Hangupcause_Codes | Hangupcause code]]. The HGC has to be set in the ''HGC'' field (it appears once ''Parameter: HGC'' is chosen).&lt;br /&gt;
* HGC (percent) – Percent of calls, which ended with a specific [[Hangupcause_Codes | Hangupcause code]]. The HGC has to be set in the ''HGC'' field (it appears once ''Parameter: HGC'' is chosen).&lt;br /&gt;
* REGISTRATION - Device registration status (either registered or not).&lt;br /&gt;
And it is possible to make actions for these types of MOR Objects or send notification about it:&lt;br /&gt;
&lt;br /&gt;
* [[Users]]&lt;br /&gt;
** All&lt;br /&gt;
** Postpaid&lt;br /&gt;
** Prepaid&lt;br /&gt;
** One User&lt;br /&gt;
* [[Providers]]&lt;br /&gt;
* [[Devices]]&lt;br /&gt;
* [[Directions and Destinations | Destinations]]&lt;br /&gt;
** One Destination by prefix.&lt;br /&gt;
** Few Destinations by prefix and % sign. Eg. 93%, 3706% and so on.&lt;br /&gt;
* [[Destinations Groups]]&lt;br /&gt;
* System&lt;br /&gt;
** Any call made will be assigned to System object (even unauthenticated calls). Useful for general System monitoring.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
Go to '''ADDONS –&amp;gt; Monitorings –&amp;gt; Alerts'''&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:alerts_path.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Here you can see list of all created Alerts and their main information like is Alert active? When it was Raised/Cleared last time? What value was at Alert/Clear...&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:alerts_list.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Click on [[Image:icon_add.png]]'''Add new Alert''' link to create an Alert or click on [[image:icon_edit.png]] icon to change settings of existing Alert.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Mor_alerts_edit_4.png|right]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''General'''&lt;br /&gt;
&lt;br /&gt;
* '''Name''' – Alert name.&lt;br /&gt;
* '''Object Type''' – select which Object you want to follow.&lt;br /&gt;
* '''Object Name''' – pecify name/prefix of Object.&lt;br /&gt;
* '''Parameter''' – choose which parameter should be followed.&lt;br /&gt;
* '''Alert Type''' – ABS means that absolute data values will be taken from specified time period.&lt;br /&gt;
'''NOTE''': Object Type, Object Name, Parameter, Alert Type cannot be changed once Alert is created. &lt;br /&gt;
* '''Ignore if Calls''' &amp;lt;= – indicate calls sum when system should ignore Alert if calls sum is less than written (if 0, Alert will not be ignored). &lt;br /&gt;
* '''Ignore if Calls''' &amp;gt;= – indicate calls sum when system should ignore Alert if calls sum is more than written (if 0, Alert will not be ignored). &lt;br /&gt;
* '''Group to Notify''' – select [[Alert Groups|Group]] of [[Alert Contacts|Contacts]] who should be informed about Alert/clear.&lt;br /&gt;
* '''Notify to User''' – it is available only when Alert object type is User or Device. Check if you want to notify User on Alert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Alert'''&lt;br /&gt;
&lt;br /&gt;
* '''Alert if &amp;lt;=''' – indicate Parameter value when system should raise Alert if value is less than written. &lt;br /&gt;
* '''Alert if &amp;gt;=''' – indicate Parameter value when system should raise Alert if value is more than written. &lt;br /&gt;
* '''Disable Object''' – check if you want to disable selected Object on Alert.&lt;br /&gt;
* '''Disable Provider in LCR'''  – indicate LCR where Provider should be disabled.&lt;br /&gt;
* '''LCR on Alert''' – select LCR which one should be used after Alert&lt;br /&gt;
* '''Notify On Alert via Email''' – check if you want that specified [[Alert Groups|Group]] will receive an email notifications about Alerts.&lt;br /&gt;
* '''Notify On Alert via Webhook''' – when set, the alert will send a webhook to all Contacts in Alert Group that have non-empty Webhook URL. More info [https://wiki.kolmisoft.com/index.php/Alerts#Webhook_notifications here].&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Clear'''&lt;br /&gt;
&lt;br /&gt;
* '''Disable Clear''' – when alert is raised, it will never be cleared.&lt;br /&gt;
* '''Clear on Condition'''&lt;br /&gt;
** '''Clear if &amp;lt;=''' – indicate Parameter value when system should Clear Alert if value is less than written. &lt;br /&gt;
** '''Clear if &amp;gt;=''' – indicate Parameter value when system should Clear Alert if value is more than written. &lt;br /&gt;
* '''Clear on time basis'''&lt;br /&gt;
** '''Clear after''' – indicate time value after which system should Clear Alert&lt;br /&gt;
** '''Clear on Date''' – indicate specific date and time when system should Clear Alert (After clear, selection will be reset)&lt;br /&gt;
* '''Enable Object''' – check if you want to enable selected(in Alert configuration) Object on Clear.&lt;br /&gt;
* '''Enable Provider in LCR''' – check if you want to enable selected(in Alert configuration) Provider on Clear.&lt;br /&gt;
* '''LCR on Clear''' – select LCR which one should be used after Clear.&lt;br /&gt;
* '''Notify On Clear via Email''' – check if you want that specified [[Alert Groups|Group]] will receive an email notifications about Clear.&lt;br /&gt;
* '''Notify On Alert via Webhook''' – when set, the alert will send a webhook to all Contacts in Alert Group that have non-empty Webhook URL. More info [https://wiki.kolmisoft.com/index.php/Alerts#Webhook_notifications here].&lt;br /&gt;
&lt;br /&gt;
'''NOTE''' one of '''Clear on Condition''' options and both '''Clear on time basis''' options can be selected at one time. System will clear alert if at least one of conditions will be true, it means that alert will be cleared on condition which first will appear. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Period'''&lt;br /&gt;
&lt;br /&gt;
You can select different time periods for each alert. This period defines time period which activity have to be checked. &lt;br /&gt;
&lt;br /&gt;
Note: period has no effect when parameter SIMULTANEOUS CALLS is chosen.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Comment''' – additional notes. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Webhook notifications =&lt;br /&gt;
&lt;br /&gt;
When an alert is raised or cleared and options '''Notify On Alert via Webhook''' or '''Notify On Clear via Webhook''' in the Alert are enabled, a HTTP request will be sent to each Contact in the Alert Group that has '''Webhook''' URL set. The request uses HTTP POST with JSON payload (Content-Type: application/json).&lt;br /&gt;
&lt;br /&gt;
JSON Payload:&lt;br /&gt;
&lt;br /&gt;
* '''type''' - Alert trigger type, either &amp;quot;ALERT&amp;quot; or &amp;quot;CLEAR&amp;quot;.&lt;br /&gt;
* '''group_id''' - Alert Group ID.&lt;br /&gt;
* '''alert_id''' - Alert ID.&lt;br /&gt;
* '''alert_name''' - Alert name.&lt;br /&gt;
* '''object_id''' - ID of checked Object.&lt;br /&gt;
* '''object_name''' - human-readable Object name.&lt;br /&gt;
* '''cause''' - Alert type.&lt;br /&gt;
* '''value''' - current value.&lt;br /&gt;
* '''count''' - data count.&lt;br /&gt;
* '''timestamp''' - timestamp when Alert/Clear triggered.&lt;br /&gt;
&lt;br /&gt;
Example payload:&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;type&amp;quot;: &amp;quot;ALERT&amp;quot;,&lt;br /&gt;
   &amp;quot;group_id&amp;quot;: 12,&lt;br /&gt;
   &amp;quot;alert_id&amp;quot;: 42,&lt;br /&gt;
   &amp;quot;alert_name&amp;quot;: &amp;quot;Test&amp;quot;,&lt;br /&gt;
   &amp;quot;object_id&amp;quot;: 123,&lt;br /&gt;
   &amp;quot;object_name&amp;quot;: &amp;quot;Example OP&amp;quot;,&lt;br /&gt;
   &amp;quot;cause&amp;quot;: &amp;quot;CALLS TOTAL&amp;quot;,&lt;br /&gt;
   &amp;quot;value&amp;quot;: 150.0,&lt;br /&gt;
   &amp;quot;count&amp;quot;: 150,&lt;br /&gt;
   &amp;quot;timestamp&amp;quot;: &amp;quot;2026-02-26 12:34:56&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
More info: [[Webhooks]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Alert vs Clear =&lt;br /&gt;
&lt;br /&gt;
Example with CPU Load, just to demonstrate what an Alert is, what a Clear is, and their proper usage.&lt;br /&gt;
&lt;br /&gt;
[[File:alert_graph.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
===Send notification and change LCR on Alert===&lt;br /&gt;
&lt;br /&gt;
Parameter: TOTAL CALLS &amp;lt;br&amp;gt;&lt;br /&gt;
Object Type: User &amp;lt;br&amp;gt;&lt;br /&gt;
Object Name: Prepaid &amp;lt;br&amp;gt;&lt;br /&gt;
Alert if &amp;gt;=: 300 &amp;lt;br&amp;gt;&lt;br /&gt;
Clear if &amp;lt;=: 200 &amp;lt;br&amp;gt;&lt;br /&gt;
LCR on alert: secondary LCR &amp;lt;br&amp;gt;&lt;br /&gt;
LCR on clear: Restore Original &amp;lt;br&amp;gt;&lt;br /&gt;
Group to Notify: support group &amp;lt;br&amp;gt;&lt;br /&gt;
Notify on Alert via Email: checked &amp;lt;br&amp;gt;&lt;br /&gt;
Period: 1h &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This Alert monitors all Calls done by Prepaid Users. If a Prepaid User makes more than 300 Calls during one hour period, his LCR will be changed to secondary LCR and Email notification will be sent to every contact on support group.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If User's Call count drops below 200 calls during one hour period, his LCR will be restored to original LCR&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Block user when simultaneous calls are detected===&lt;br /&gt;
&lt;br /&gt;
Parameter: SIMULTANEOUS CALLS &amp;lt;br&amp;gt;&lt;br /&gt;
Object Type: User &amp;lt;br&amp;gt;&lt;br /&gt;
Object Name: All &amp;lt;br&amp;gt;&lt;br /&gt;
Alert if &amp;gt;=: 2 &amp;lt;br&amp;gt;&lt;br /&gt;
Group to Notify: administration &amp;lt;br&amp;gt;&lt;br /&gt;
Notify on Alert via Email: checked &amp;lt;br&amp;gt;&lt;br /&gt;
Disable Object: checked &amp;lt;br&amp;gt;&lt;br /&gt;
Disable Clear: checked &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This Alert monitors simultaneous calls done by all Users. If a User makes more than (or equal to) 2 simultaneous Calls to the same destination, his account will be suspended and Email notification will be sent to every contact on administration group.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This alert will no be cleared automatically and user will stay suspended even if no more simultaneous calls are present.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Block user if it spends more than 50 EUR in 24h===&lt;br /&gt;
&lt;br /&gt;
Parameter: PRICE SUM &amp;lt;br&amp;gt;&lt;br /&gt;
Object Type: User &amp;lt;br&amp;gt;&lt;br /&gt;
Object Name: All &amp;lt;br&amp;gt;&lt;br /&gt;
Alerf if &amp;gt;= 50 &amp;lt;br&amp;gt;&lt;br /&gt;
Group to Notify: administration &amp;lt;br&amp;gt;&lt;br /&gt;
Notify on Alert via Email: checked &amp;lt;br&amp;gt;&lt;br /&gt;
Disable Object: checked &amp;lt;br&amp;gt;&lt;br /&gt;
Disable Clear: checked &amp;lt;br&amp;gt;&lt;br /&gt;
Check last: 24 h &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Alerts triggered by other Alerts===&lt;br /&gt;
&lt;br /&gt;
Administrators are able to create alerts that depend on other alerts. What that means is, that you are able to create an alert that is triggered by a set or a subset of other alerts.&lt;br /&gt;
&lt;br /&gt;
'''Example:'''&lt;br /&gt;
* Alert 1 is triggered when a specific user's ACD drops below ten seconds.&lt;br /&gt;
* Alert 2 is triggered when a the same user's Device's ASR drops below 50%.&lt;br /&gt;
* Alert 3 is triggered when both Alert 1 and Alert 2 is triggered, so that the technicians are notified.&lt;br /&gt;
&lt;br /&gt;
In order to set up such a chain of events, you should first create Alert 1 and Alert 2.&lt;br /&gt;
&lt;br /&gt;
Then, you should set up Alert 3.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Alert_group_parameter.png‎]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Configure your alert as usual, but instead of a specific parameter choose GROUP.&lt;br /&gt;
* Then, add the alert dependencies using the shown interface.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Alert_group_alert.png‎]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Set a number of alerts, that, when reached will trigger the alert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Alert_group_clear.png‎]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Finally set up a number of alerts that will clear your alert.&lt;br /&gt;
&lt;br /&gt;
These alerts can also be nested, without worrying about circular-dependencies, '''MOR''' simply will not let you make them.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=See also=&lt;br /&gt;
&lt;br /&gt;
* [[Alert Schedules]]&lt;br /&gt;
* [[Alert Groups]]&lt;br /&gt;
* [[Alert Contacts]]&lt;br /&gt;
* [[ASR/ACD]]&lt;br /&gt;
* [[How to resolve long PDD]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=M4_Switch_Manual&amp;diff=31665</id>
		<title>M4 Switch Manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=M4_Switch_Manual&amp;diff=31665"/>
		<updated>2026-06-11T13:14:10Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Reporting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;iframe width=&amp;quot;640&amp;quot; height=&amp;quot;360&amp;quot; src=&amp;quot;https://www.youtube.com/embed/R6rje2SBOi8&amp;quot; title=&amp;quot;YouTube video player&amp;quot; frameborder=&amp;quot;0&amp;quot; allow=&amp;quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&amp;quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;M4 is class 4 Softswitch with Billing and Routing with extended functionality, increased stability and professional support directly from the developers. It enables VoIP providers to offer wholesale/transit services.&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= General Info =&lt;br /&gt;
&lt;br /&gt;
* [[M4 Switch | Introduction]]&lt;br /&gt;
* [[M4 Supported Business Models | Supported Business Models]]&lt;br /&gt;
* [https://www.kolmisoft.com/softswitches/class-4-softswitch Functionality]&lt;br /&gt;
* [[M4 System Architecture]]&lt;br /&gt;
* [[M4 Supported Codecs]]&lt;br /&gt;
* [[M4 Codec Transcoding]]&lt;br /&gt;
* [[M4 API | API]]&lt;br /&gt;
* [[M4 Admin Interface|Admin Interface]]&lt;br /&gt;
* [[M4 Video Demonstrations]]&lt;br /&gt;
* [[M4 Changelog]]&lt;br /&gt;
* [[M4 interconnection form]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Configuration = &lt;br /&gt;
&lt;br /&gt;
* [[M4 Settings | Settings]]&lt;br /&gt;
* [[M4 Users | Users]]&lt;br /&gt;
* [[M4 Managers | Managers]]&lt;br /&gt;
* [[system.conf]]&lt;br /&gt;
* [[Performance Suggestions M4 | Performance Suggestions]]&lt;br /&gt;
* [[Destination Groups Policy]]&lt;br /&gt;
* [[M4 Caching]]&lt;br /&gt;
* [[M4 Media Bypass|Media Bypass]]&lt;br /&gt;
* [[M4 White-labeling | White-labeling]]&lt;br /&gt;
* [[M4 SIP Header Manipulation]]&lt;br /&gt;
** [[M4 RPID/PAI | RPID/PAI]]&lt;br /&gt;
* [[M4 Background Tasks]]&lt;br /&gt;
* [[M4 Servers]]&lt;br /&gt;
* [[M4 TLS]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Routing =&lt;br /&gt;
&lt;br /&gt;
* [[M4 Routing Logic | Routing Logic]]&lt;br /&gt;
* [[M4 Regexp Examples|Regexp Examples]]&lt;br /&gt;
* [[M4 Source Transformation | Source Transformation]]&lt;br /&gt;
* [[M4 Destination Transformation | Destination Transformation]]&lt;br /&gt;
* [[M4 Routing Groups | Routing Groups (RG) ]]&lt;br /&gt;
* [[M4 Quality Routing | Quality Routing]]&lt;br /&gt;
* [[M4 Dial Peers | Dial Peers (DP) ]]&lt;br /&gt;
* [[M4_Directions_and_Destinations | Directions and Destinations]]&lt;br /&gt;
* [[M4_How_to_block_calls | How to block calls]]&lt;br /&gt;
* [[M4_Mobile_Number_Portability | Mobile Number Portability]]&lt;br /&gt;
* [[M4_Local_Number_Portability | Local Number Portability - US Jurisdictional Routing]]&lt;br /&gt;
* [[M4_Header_Transformation_Rules_Groups | M4 Header Transformation Rules Groups]]&lt;br /&gt;
* [[M4 TP Deviations]]&lt;br /&gt;
* [[M4 RTPEngine GeoIP]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Connection Points =&lt;br /&gt;
&lt;br /&gt;
* [[M4_Connection_Points | Connection Points]]&lt;br /&gt;
** [[M4 Termination Points | Termination Points (TP) ]]&lt;br /&gt;
*** [[M4 TP Call Limit | TP Call Limit]]&lt;br /&gt;
** [[M4 Origination Points | Origination Points (OP) ]]&lt;br /&gt;
** [[M4 default device settings]]&lt;br /&gt;
** [[M4 disable Q.850 Reason header]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Billing =&lt;br /&gt;
&lt;br /&gt;
* [[M4 Tariffs| Tariffs]]&lt;br /&gt;
* [[M4_Custom_Tariffs | Custom Tariffs]]&lt;br /&gt;
* [[M4_CDR_Disputes | CDR Disputes]]&lt;br /&gt;
* [[M4 EU Roaming Regulations | EU Roaming Regulations]] - Bill calls by CallerID/Source&lt;br /&gt;
* [[M4 Rates | Rates]]&lt;br /&gt;
** [[M4 Rate Notifications | Rate Notifications]]&lt;br /&gt;
** [[M4 Blocked Rates | Blocked Rates]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Accounting =&lt;br /&gt;
&lt;br /&gt;
* [[M4 Payments | Payments]]&lt;br /&gt;
* [[M4 Customer Invoices| Customer Invoices]]&lt;br /&gt;
* [[M4 Supplier Invoices| Supplier Invoices]]&lt;br /&gt;
* [[M4_CDR_Rerating | CDR Rerating]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=SIP Trunking Functionality= &lt;br /&gt;
* [[M4 Subscriptions|Subscriptions]]&lt;br /&gt;
** [[M4 Charge Plans|Charge Plans]]&lt;br /&gt;
* [[M4 Services|Services]]&lt;br /&gt;
** [[M4 DID Management|DIDs]]&lt;br /&gt;
*** [[M4 DIDs Import from CSV|DID Import from CSV]]&lt;br /&gt;
** [[M4 Flat-Rates|Flat-Rates]]&lt;br /&gt;
** [[M4 Custom Services|Custom Services]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Reporting =&lt;br /&gt;
&lt;br /&gt;
* [[M4 Reports Examples | Reports Examples]]&lt;br /&gt;
* [[M4_Aggregates | Aggregates]]&lt;br /&gt;
* [[M4 Aggregates Auto Export | Aggregates Auto Export]]&lt;br /&gt;
* [[M4_Calls_by_Clients | Calls by Clients]]&lt;br /&gt;
** [[M4 Calls by Clients Detailed| Calls by Clients Detailed]]&lt;br /&gt;
* [[M4_Calls_List | Calls List]]&lt;br /&gt;
** [[M4 Call Info|Call Info]]&lt;br /&gt;
* [[M4_Quick_Stats | Quick Stats]]&lt;br /&gt;
* [[M4 Balance Report | Balance Report]]&lt;br /&gt;
* [[M4 Financial Status|Financial Status]]&lt;br /&gt;
* [[M4 Destination Groups Stats | Destination Groups Stats]]&lt;br /&gt;
* [[M4_Load_Stats | Load Stats]]&lt;br /&gt;
* [[M4_Calls_Dashboard | Calls Dashboard]]&lt;br /&gt;
* [[M4 Calls per Hour]]&lt;br /&gt;
* [[M4 Active Calls|Active Calls]]&lt;br /&gt;
** [[M4 Active Calls Graph]]&lt;br /&gt;
** [[M4 Active Calls Per Server]]&lt;br /&gt;
** [[M4 Active Calls Per User Originator Point]]&lt;br /&gt;
** [[M4_Terminator_Active_Calls| Terminator Active Calls]]&lt;br /&gt;
** [[M4 Active Calls Per User/Vendor Grouped By Destination Group]]&lt;br /&gt;
* [[M4 Hangup Cause | Hangup Cause Report]]&lt;br /&gt;
* [[M4 Number Pools Usage Report]]&lt;br /&gt;
* [[Webhooks]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Maintenance/Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
* [[M4 CDR Management | CDR Management]]&lt;br /&gt;
** [[M4 Automatic CDR Export | Automatic CDR Export]]&lt;br /&gt;
** [[M4 CDR Export Templates | CDR Export Templates]]&lt;br /&gt;
* [[M4 Hangupcause Codes | Hangupcause Codes]]&lt;br /&gt;
** [[M4 Disconnect Code Changes | Disconnect Code Changes]]&lt;br /&gt;
* [[M4 Disconnect Codes]]&lt;br /&gt;
* [[M4 Warning Balance | Warning Balance]]&lt;br /&gt;
* [[M4 Alerts | Alerts]]&lt;br /&gt;
* [[M4 Number Pools|Number Pools]]&lt;br /&gt;
* [[M4 Directions | Directions]]&lt;br /&gt;
* [[M4 Call Tracing | Call Tracing]]&lt;br /&gt;
* [[M4 Call Info | Call Info]]&lt;br /&gt;
* [[M4 under NAT]]&lt;br /&gt;
* [[M4 Email log]]&lt;br /&gt;
* [[Second Admin account]]&lt;br /&gt;
* [[OPTIONS packet sending]]&lt;br /&gt;
* [[M4 Block and Hide Connection Points]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Security =&lt;br /&gt;
&lt;br /&gt;
* [[M4 Whitelisted IPs]]&lt;br /&gt;
* [[M4_Blocked_IPs | Block IPs]]&lt;br /&gt;
* [[M4_Blocked_Countries | Block Countries]]&lt;br /&gt;
* [[M4_Login_Failure_Report | Login_Failure_Report]]&lt;br /&gt;
* [[M4_Login_with_approved_IP%27s | Login with approved IP's]]&lt;br /&gt;
* [[Blocking SIP Scanners]]&lt;br /&gt;
* [[M4 Iptables Chains]]&lt;br /&gt;
* [[M4 two factor authentication]]&lt;br /&gt;
* [[How to set up SSL certificate with Let's Encrypt]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Addons =&lt;br /&gt;
* [[Automatic Tariff Import | Automatic Tariff Import]]&lt;br /&gt;
* [[M4 Mobile Number Portability|Mobile Number Portability]]&lt;br /&gt;
* Payment Gateway (includes  [[M4 PayPal Addon| PayPal]] and [[M4 Stripe|Stripe]])&lt;br /&gt;
* [[M4_Inbound_DIDs|Inbound DIDs]] (includes [[M4_DID_Management|DIDs]], [[M4_Services|Services]], [[M4_Flat-Rates|Flat-Rates]] and [[M4_Subscriptions|Subscriptions]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= I Have a Problem  =&lt;br /&gt;
&lt;br /&gt;
* [[M4_Ports_which_should_be_opened | Ports which should be opened]]&lt;br /&gt;
* [[M4 Call Count Bigger That What We Can Process]]&lt;br /&gt;
* [[Sometimes users are blocked automatically]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= User Portal =&lt;br /&gt;
&lt;br /&gt;
* [[M4 User Dashboard | Dashboard]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tutorials = &lt;br /&gt;
&lt;br /&gt;
* [[M4 How to make first call | How to make first call]]&lt;br /&gt;
* [[M4 Execute External Script]]&lt;br /&gt;
* [[M4 Video Demonstrations]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=Webhooks&amp;diff=31664</id>
		<title>Webhooks</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=Webhooks&amp;diff=31664"/>
		<updated>2026-06-11T13:12:55Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;MOR and M4 can send **outbound HTTP POST** requests to URLs you configure when certain events occur. There are two delivery formats:  * '''Query-string webhooks''' — HTTP POST with an '''empty body'''; event data is appended to your configured URL as query string parameters (Call End, Warning Balance). * '''JSON webhooks''' — HTTP POST with a '''JSON body''' and &amp;lt;code&amp;gt;Content-Type: application/json&amp;lt;/code&amp;gt; (Alerts).  &amp;lt;br&amp;gt;&amp;lt;br&amp;gt; == Overview ==  {| class=&amp;quot;wikitable&amp;quot; ! Web...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MOR and M4 can send **outbound HTTP POST** requests to URLs you configure when certain events occur. There are two delivery formats:&lt;br /&gt;
&lt;br /&gt;
* '''Query-string webhooks''' — HTTP POST with an '''empty body'''; event data is appended to your configured URL as query string parameters (Call End, Warning Balance).&lt;br /&gt;
* '''JSON webhooks''' — HTTP POST with a '''JSON body''' and &amp;lt;code&amp;gt;Content-Type: application/json&amp;lt;/code&amp;gt; (Alerts).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Webhook type !! Product !! When it fires !! Request format&lt;br /&gt;
|-&lt;br /&gt;
| Call End || MOR || A completed call whose source device has a webhook URL || POST, empty body, query string&lt;br /&gt;
|-&lt;br /&gt;
| Warning Balance || MOR || User balance drops below the configured admin warning threshold || POST, empty body, URL built from template&lt;br /&gt;
|-&lt;br /&gt;
| Alert / Clear || MOR, M4 || An alert is raised or cleared, and the matching notify option is enabled || POST, JSON body&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Call End Webhook ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
* '''Per device:''' Device edit → Advanced → '''Webhook URL for Call End''' (field &amp;lt;code&amp;gt;webhook_url_for_call_end&amp;lt;/code&amp;gt;).&lt;br /&gt;
* '''Default for new devices:''' SETTINGS → Default Device → same field.&lt;br /&gt;
* '''Legacy API write:''' [[MOR API]] [[MOR API device update]] parameter &amp;lt;code&amp;gt;webhook_url_for_call_end&amp;lt;/code&amp;gt; (not included in hash). An empty value clears the URL.&lt;br /&gt;
* '''Legacy API read:''' [[MOR API device details get]] tag &amp;lt;code&amp;gt;webhook_url_for_call_end&amp;lt;/code&amp;gt;.&lt;br /&gt;
* URL must start with &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== When it fires ===&lt;br /&gt;
&lt;br /&gt;
* MOR checks for newly completed calls approximately every '''10 seconds'''.&lt;br /&gt;
* Only calls where the '''source device''' has a non-empty webhook URL are considered.&lt;br /&gt;
* Only calls with &amp;lt;code&amp;gt;calltime&amp;lt;/code&amp;gt; within the last '''~2 hours''' are eligible.&lt;br /&gt;
* On first use, delivery starts from the current newest call — '''historical calls are not sent'''.&lt;br /&gt;
* After a restart, MOR resumes from the last successfully delivered call instead of skipping or re-sending older calls.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Request format ===&lt;br /&gt;
&lt;br /&gt;
* '''Method:''' HTTP POST&lt;br /&gt;
* '''Body:''' empty&lt;br /&gt;
* '''Parameters:''' query string on the configured URL&lt;br /&gt;
&lt;br /&gt;
If your base URL already contains query parameters (for example, &amp;lt;code&amp;gt;https://example.com/hook?api_key=secret&amp;lt;/code&amp;gt;), MOR merges call parameters with &amp;lt;code&amp;gt;&amp;amp;&amp;lt;/code&amp;gt; (single &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt;). Parameter values are URL-encoded.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;user_id&amp;lt;/code&amp;gt; || User id associated with the call&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;device_id&amp;lt;/code&amp;gt; || Source device id&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;calltime&amp;lt;/code&amp;gt; || Call date/time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;src&amp;lt;/code&amp;gt; || Caller source&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dst&amp;lt;/code&amp;gt; || Destination&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;hangupcause&amp;lt;/code&amp;gt; || Hangup cause code&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;billsec&amp;lt;/code&amp;gt; || Billed seconds&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;call_price&amp;lt;/code&amp;gt; || Call price in the user's currency&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;balance_at_the_end_of_call&amp;lt;/code&amp;gt; || User balance in the user's currency at send time&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;currency&amp;lt;/code&amp;gt; || User currency code (for example &amp;lt;code&amp;gt;USD&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;EUR&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Examples ===&lt;br /&gt;
&lt;br /&gt;
Bare base URL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;http://192.168.1.142:8080/test?user_id=2&amp;amp;device_id=80&amp;amp;calltime=2026-06-11+10%3A00%3A00&amp;amp;src=101&amp;amp;dst=123123&amp;amp;hangupcause=16&amp;amp;billsec=50&amp;amp;call_price=5&amp;amp;balance_at_the_end_of_call=100&amp;amp;currency=USD&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Base URL with existing query parameter:&lt;br /&gt;
&lt;br /&gt;
* Configured: &amp;lt;code&amp;gt;http://192.168.1.142:8080/test?api_key=mytoken&amp;lt;/code&amp;gt;&lt;br /&gt;
* Sent: &amp;lt;code&amp;gt;http://192.168.1.142:8080/test?api_key=mytoken&amp;amp;user_id=2&amp;amp;device_id=80&amp;amp;...&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Limitations ===&lt;br /&gt;
&lt;br /&gt;
* Only the '''source''' device webhook URL is used (not the destination device).&lt;br /&gt;
* Delivery is '''not real-time''' at hangup — expect up to ~10 seconds polling delay.&lt;br /&gt;
* Call-end and warning-balance webhooks are delivered through the same outbound notification pipeline.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Warning Balance Webhook ==&lt;br /&gt;
&lt;br /&gt;
MOR-only. See [[Warning balance]] for the full feature (email, audio announcement, scheduling).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
On '''[[User Details]]''' (user edit), in the Warning Balance section:&lt;br /&gt;
&lt;br /&gt;
* Enable '''Active''' for Warning Balance.&lt;br /&gt;
* Set '''Send warning when balance drops lower than''' thresholds (including the admin threshold that triggers the webhook).&lt;br /&gt;
* Check '''Admin Webhook''' and set the webhook URL on the same row (&amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt; required).&lt;br /&gt;
* The webhook is '''not tied to email''' — it can run with webhook only (Active enabled, threshold and URL set) even if email notifications are disabled.&lt;br /&gt;
* Admin Webhook fields are available from an admin or accountant account editing the user.&lt;br /&gt;
&lt;br /&gt;
The URL is a '''template''': MOR substitutes [[Email variables]] into the URL the same way as email bodies (for example, &amp;lt;code&amp;gt;https://example.com/hook?user=&amp;lt;%= username %&amp;gt;&amp;amp;balance=&amp;lt;%= balance %&amp;gt;&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== When it fires ===&lt;br /&gt;
&lt;br /&gt;
* Fires when the same conditions that send the '''admin''' Warning Balance email are met (user balance below the admin warning threshold).&lt;br /&gt;
* Warning Balance checks run on an '''hourly''' schedule — delivery may lag briefly after the balance crosses the threshold.&lt;br /&gt;
* If '''Every day at''' is selected for Warning Balance email timing, the webhook follows that schedule as well (not on every balance change).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Request format ===&lt;br /&gt;
&lt;br /&gt;
* '''Method:''' HTTP POST&lt;br /&gt;
* '''Body:''' empty&lt;br /&gt;
* '''URL:''' rendered from the configured Admin Webhook URL template after variable substitution&lt;br /&gt;
&lt;br /&gt;
Common variables include &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;balance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;nice_balance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;warning_email_balance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;nice_warning_email_balance&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;currency&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;user_id&amp;lt;/code&amp;gt;. See [[Email variables]] for the full list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
Configured URL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://example.com/warning?user=&amp;lt;%= username %&amp;gt;&amp;amp;balance=&amp;lt;%= balance %&amp;gt;&amp;amp;currency=&amp;lt;%= currency %&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sent request (POST to rendered URL, empty body):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;https://example.com/warning?user=john&amp;amp;balance=4.50&amp;amp;currency=USD&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Alert Webhooks ==&lt;br /&gt;
&lt;br /&gt;
When an alert is '''raised''' or '''cleared''', MOR/M4 can POST a JSON notification to every contact in the alert's notification group that has a non-empty '''Webhook URL'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== MOR configuration ===&lt;br /&gt;
&lt;br /&gt;
# Contacts — set '''Webhook URL''' per contact: '''ADDONS → Monitorings → Contacts''' ([[Alert Contacts]]).&lt;br /&gt;
# Groups — assign contacts to a group: '''ADDONS → Monitorings → Groups''' ([[Alert Groups]]).&lt;br /&gt;
# Alerts — on alert edit ([[Alerts]]):&lt;br /&gt;
#* '''Group to Notify''' — select the contact group.&lt;br /&gt;
#* '''Notify On Alert via Webhook''' — send webhook when the alert is raised.&lt;br /&gt;
#* '''Notify On Clear via Webhook''' — send webhook when the alert is cleared.&lt;br /&gt;
&lt;br /&gt;
See [[Monitorings Addon]] and [[Alerts]] for alert parameters, clear rules, and examples.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== M4 configuration ===&lt;br /&gt;
&lt;br /&gt;
Same webhook payload as MOR. Configuration paths on M4:&lt;br /&gt;
&lt;br /&gt;
# Contacts — set '''Webhook URL''' on each alert contact (see [[M4 Alerts]]).&lt;br /&gt;
# Alerts — under '''SECURITY → Alerts''' ([[M4 Alerts]]):&lt;br /&gt;
#* '''Group to Notify''' — select the contact group.&lt;br /&gt;
#* '''Notify On Alert via Webhook''' / '''Notify On Clear via Webhook''' — same options as MOR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== When it fires ===&lt;br /&gt;
&lt;br /&gt;
* '''ALERT''' — when the alert condition is met and '''Notify On Alert via Webhook''' is enabled on that alert.&lt;br /&gt;
* '''CLEAR''' — when the alert clears and '''Notify On Clear via Webhook''' is enabled on that alert.&lt;br /&gt;
* One HTTP request is sent to '''each''' contact in the selected group whose '''Webhook URL''' is non-empty.&lt;br /&gt;
* Contact webhook URLs must start with &amp;lt;code&amp;gt;http://&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;https://&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Request format ===&lt;br /&gt;
&lt;br /&gt;
* '''Method:''' HTTP POST&lt;br /&gt;
* '''Content-Type:''' &amp;lt;code&amp;gt;application/json&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''Body:''' JSON object&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt; || Trigger type: &amp;lt;code&amp;gt;ALERT&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;CLEAR&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;group_id&amp;lt;/code&amp;gt; || Alert group id&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;alert_id&amp;lt;/code&amp;gt; || Alert id&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;alert_name&amp;lt;/code&amp;gt; || Alert name&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;object_id&amp;lt;/code&amp;gt; || Id of the monitored object&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;object_name&amp;lt;/code&amp;gt; || Human-readable object name&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;cause&amp;lt;/code&amp;gt; || Alert parameter / cause (for example &amp;lt;code&amp;gt;CALLS TOTAL&amp;lt;/code&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;value&amp;lt;/code&amp;gt; || Current measured value (number)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;count&amp;lt;/code&amp;gt; || Data count (integer)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;timestamp&amp;lt;/code&amp;gt; || Date/time when the alert or clear triggered (&amp;lt;code&amp;gt;YYYY-MM-DD HH:MM:SS&amp;lt;/code&amp;gt;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Example payload ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;type&amp;quot;: &amp;quot;ALERT&amp;quot;,&lt;br /&gt;
  &amp;quot;group_id&amp;quot;: 12,&lt;br /&gt;
  &amp;quot;alert_id&amp;quot;: 42,&lt;br /&gt;
  &amp;quot;alert_name&amp;quot;: &amp;quot;Test&amp;quot;,&lt;br /&gt;
  &amp;quot;object_id&amp;quot;: 123,&lt;br /&gt;
  &amp;quot;object_name&amp;quot;: &amp;quot;Example OP&amp;quot;,&lt;br /&gt;
  &amp;quot;cause&amp;quot;: &amp;quot;CALLS TOTAL&amp;quot;,&lt;br /&gt;
  &amp;quot;value&amp;quot;: 150.0,&lt;br /&gt;
  &amp;quot;count&amp;quot;: 150,&lt;br /&gt;
  &amp;quot;timestamp&amp;quot;: &amp;quot;2026-02-26 12:34:56&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[Alerts]] — MOR alert configuration and examples&lt;br /&gt;
* [[M4 Alerts]] — M4 alert configuration&lt;br /&gt;
* [[Warning balance]] — Warning Balance email, audio, and scheduling&lt;br /&gt;
* [[Alert Contacts]] — contact webhook URLs for MOR alerts&lt;br /&gt;
* [[Alert Groups]] — group contacts for alert notifications&lt;br /&gt;
* [[Email variables]] — template variables for Warning Balance webhook URLs&lt;br /&gt;
* [[MOR API device update]] — set &amp;lt;code&amp;gt;webhook_url_for_call_end&amp;lt;/code&amp;gt; via API&lt;br /&gt;
* [[MOR API device details get]] — read &amp;lt;code&amp;gt;webhook_url_for_call_end&amp;lt;/code&amp;gt;&lt;br /&gt;
* [[MOR API]] — legacy API overview&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_Manual&amp;diff=31663</id>
		<title>MOR Manual</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_Manual&amp;diff=31663"/>
		<updated>2026-06-11T13:12:05Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Other functionality */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;iframe width=&amp;quot;640&amp;quot; height=&amp;quot;360&amp;quot; src=&amp;quot;https://www.youtube.com/embed/R65ufpHOz_g&amp;quot; title=&amp;quot;YouTube video player&amp;quot; frameborder=&amp;quot;0&amp;quot; allow=&amp;quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&amp;quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;mkmeta&amp;gt;Detailed instructions how to use MOR Class 5 Softswitch&amp;lt;/mkmeta&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;MOR is a Class 5 Softswitch with Billing and Routing with extended functionality, increased stability, and professional support directly from the developers. It enables VoIP providers to offer various services.&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Introduction =&lt;br /&gt;
* [[Introduction]] [[Image:flag_esp.jpg|alt=&amp;quot;flag&amp;quot;|link=|right|link=Introduction (es)]]&lt;br /&gt;
* [[Who is this product designed for]]&lt;br /&gt;
* [[MOR Functionality]]&lt;br /&gt;
* [[Supported Business Models]]&lt;br /&gt;
* [[MOR Admin Interface|Admin Interface]]&lt;br /&gt;
* [[How to make first call|How to make a first call]] [[Image:flag_rus.jpg|alt=&amp;quot;flag&amp;quot;|link=|right|link=How to make first call (ru)]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Concepts/Definitions =&lt;br /&gt;
* [[MOR Terminology]]&lt;br /&gt;
* [[Billing Concepts]] [[Image:flag_rus.jpg|right|alt=&amp;quot;flag&amp;quot;|link=|link=Billing Concepts (ru)]]&lt;br /&gt;
* [[Billing Logic]]&lt;br /&gt;
* [[Call explained]]&lt;br /&gt;
* [[E.164]]&lt;br /&gt;
* [[Rounding]]&lt;br /&gt;
* [[Multi-Tax system]]&lt;br /&gt;
* [[What is a PIN?]]&lt;br /&gt;
* [[ASR/ACD]]&lt;br /&gt;
* [[Margin and Markup]]&lt;br /&gt;
* [[What are callgroups and pickupgroups|What are callgroups and pickupgroups?]]&lt;br /&gt;
* [[Balance and Credit]]&lt;br /&gt;
* [[Local Calls]]&lt;br /&gt;
* [[Prepaid Logic]]&lt;br /&gt;
* [[Authentication]]&lt;br /&gt;
* [[Fax over VoIP]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Configuration =&lt;br /&gt;
* [[mor.conf]]&lt;br /&gt;
* [[Performance Suggestions]]&lt;br /&gt;
* [[Configuration from GUI]]&lt;br /&gt;
** [[reCAPTCHA]]&lt;br /&gt;
** [[Payments configuration]]&lt;br /&gt;
** [[Default device settings]]&lt;br /&gt;
** [[Default_user|Default user settings]]&lt;br /&gt;
** [[Accountant permissions]]&lt;br /&gt;
** [[Logo change]]&lt;br /&gt;
** [[Currencies]]&lt;br /&gt;
** [[Translations]]&lt;br /&gt;
** [[Global_date_format | Global date format]]&lt;br /&gt;
** [[Remove Manual link from admin GUI]]&lt;br /&gt;
* [[Voicemail]]&lt;br /&gt;
* [[Multi Server support]]&lt;br /&gt;
* [[MOR White-labeling|White-labeling]]&lt;br /&gt;
* Emails&lt;br /&gt;
** [[Configuration_from_GUI#Emails|Email settings]]&lt;br /&gt;
** [[Emails|Mass Emails]]&lt;br /&gt;
** [[Email variables]]&lt;br /&gt;
* [[WebRTC]]&lt;br /&gt;
* [[Time Zone list]]&lt;br /&gt;
* [[MOR SIP Header Transformations]]&lt;br /&gt;
* [[MOR STIR/SHAKEN]]&lt;br /&gt;
* [[PJSIP Codec negotiation]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[MOR Number Manipulation | Number Manipulation]] =&lt;br /&gt;
* [[MOR Localization | Localization]]&lt;br /&gt;
** [[MOR Location Groups | Location Groups]]&lt;br /&gt;
* [[MOR Device Rules | Device Rules]]&lt;br /&gt;
** [[MOR Device Rule Groups | Device Rule Groups]]&lt;br /&gt;
* [[MOR Provider Rules | Provider Rules]]&lt;br /&gt;
* [[DID handling by Localization]]&lt;br /&gt;
* [[MOR Number Manipulation Examples | Number Manipulation Examples]]&lt;br /&gt;
* [[Block wrong short numbers with Localization]]&lt;br /&gt;
* [[MOR - LCR/Tariff change based on call prefix]]&lt;br /&gt;
* [[Prefix finder]]&lt;br /&gt;
* [[MOR Prelocalization]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=[[Users]] =&lt;br /&gt;
* [[User Details]]&lt;br /&gt;
** [[Warning balance]]&lt;br /&gt;
** [[User Blocking]]&lt;br /&gt;
* [[Hide Users]]&lt;br /&gt;
* [[Why MOR does not allow to delete users|Why MOR does not allow users to be deleted]]&lt;br /&gt;
* [[How to create User and Device|How to create a User and Device]]&lt;br /&gt;
* [[MOR_forgot_user_password|How to reset lost GUI password]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[Devices]] =&lt;br /&gt;
* [[Device settings]]&lt;br /&gt;
** [[H323 Device settings]]&lt;br /&gt;
** [[Extension lines]]&lt;br /&gt;
** [[Ring several devices at same time]]&lt;br /&gt;
** [[How to create User and Device|How to create a User and Device]]&lt;br /&gt;
** [[Allowed Addresses]]&lt;br /&gt;
* [[Devices Bulk Create]]&lt;br /&gt;
* [[Trunks]]&lt;br /&gt;
* [[CLIs (Incoming CallerIDs)]]&lt;br /&gt;
** [[ANI/CLI ban system]]&lt;br /&gt;
* [[Duplicate call prevention]]&lt;br /&gt;
* [[Allow loss calls]]&lt;br /&gt;
* [[Device groups]]&lt;br /&gt;
* [[Call Flow]]&lt;br /&gt;
* [[Which codecs should I choose for devices|Which codecs should I choose for devices?]]&lt;br /&gt;
**[[Change_Audio/Video_Codecs_priority| Codecs priority]]&lt;br /&gt;
* [[Authentication|How to configure IP Authentication for Device]]&lt;br /&gt;
* [[Registration_Status|Device registration status]]&lt;br /&gt;
* [[MOR Device Rules]]&lt;br /&gt;
* [[Feature Codes]]&lt;br /&gt;
* [[Hide Device Password]]&lt;br /&gt;
* [[Disallow duplicate device usernames]]&lt;br /&gt;
* [[Disallow users to change their email]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[Providers]] =&lt;br /&gt;
&lt;br /&gt;
(also known as terminators, suppliers, vendors or trunks)&lt;br /&gt;
&lt;br /&gt;
* [[Terminators]]&lt;br /&gt;
* [[Provider with several IP|Provider with several IPs]]&lt;br /&gt;
* [[H323 Provider settings]]&lt;br /&gt;
* [[Provider with ANI]]&lt;br /&gt;
* [[Configure Provider which can make calls]]&lt;br /&gt;
* [[Configure Provider with dynamic IP]]&lt;br /&gt;
* [[Simultaneous call limitation]]&lt;br /&gt;
* [[NO ANSWER/BUSY interpretation for providers]]&lt;br /&gt;
* [[Provider_Deviations|Provider Deviations]]&lt;br /&gt;
* [[Provider AGI script]]&lt;br /&gt;
* Provider Configuration&lt;br /&gt;
** [[Net2phone configuration | Net2phone]]&lt;br /&gt;
** [[Broadvoice configuration | Broadvoice]]&lt;br /&gt;
** [[Eutelia]]&lt;br /&gt;
** [[IXC]]&lt;br /&gt;
** [[Configuring DIDWW | DIDWW]]&lt;br /&gt;
** [[Vitelity]]&lt;br /&gt;
** [[Vono]]&lt;br /&gt;
** [[How_to_add_Voicetrading_Provider|Voicetrading]]&lt;br /&gt;
** [[Portech GSM as Provider | Portech]]&lt;br /&gt;
** [[DID Logic]]&lt;br /&gt;
** [[Voxbeam]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[Tariffs]] =&lt;br /&gt;
* [[Directions and Destinations]]&lt;br /&gt;
** [[Destinations Groups]]&lt;br /&gt;
** [[Destination Groups Policy]]&lt;br /&gt;
** [[Block some Destination to User|Block a Destination to a User]]&lt;br /&gt;
** [[Export and bulk import of unassigned destinations]]&lt;br /&gt;
* [[Day setup]]&lt;br /&gt;
* [[Bulk change Tariffs for Users]]&lt;br /&gt;
* [[Wholesale Tariff | Wholesale]]&lt;br /&gt;
** [[Entering Rates for Wholesale Tariff]]&lt;br /&gt;
** [[Rate import from CSV]]&lt;br /&gt;
** [[Blocked Rates]]&lt;br /&gt;
** [[CLI Groups - CLI Prefixes]]&lt;br /&gt;
* Retail&lt;br /&gt;
** [[Advanced Rates | Advanced (Retail) Rates]]&lt;br /&gt;
*** [[Entering Rates for Retail Tariff]]&lt;br /&gt;
*** [[Advanced Rates for Users| Advanced (Retail) Rates for Users]]&lt;br /&gt;
** [[Custom Rates]]&lt;br /&gt;
* [[Tariff Transformation]]&lt;br /&gt;
** [[Make Retail Tariff from Wholesale Tariff explained]]&lt;br /&gt;
* [[Why User can't check his Rates]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Call Routing =&lt;br /&gt;
* [[LCR]]&lt;br /&gt;
* [[LCR Logic]]&lt;br /&gt;
* [[How to add Provider to LCR]]&lt;br /&gt;
* [[Call Routing by price]]&lt;br /&gt;
* [[Call Routing by priority (Manual LCR)]]&lt;br /&gt;
* [[Call routing per destination basis]]&lt;br /&gt;
** [[How to route call to specific Destination through specific Provider]]&lt;br /&gt;
** [[How to block calls]]&lt;br /&gt;
** [[Blocked_Countries | How to block countries]]&lt;br /&gt;
** [[Block some Destination to User|Block a Destination to a User]]&lt;br /&gt;
* [[MOR - LCR/Tariff change based on call prefix]]&lt;br /&gt;
* [[Routing by Percent]] or Weight-based routing&lt;br /&gt;
* [[Why call was not routed through other provider/trunk?|Why was a call not routed through another provider/trunk?]]&lt;br /&gt;
* [[Intelligent Internal Routing]]&lt;br /&gt;
* Advanced [[extensions_mor_custom.conf]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= DIDs =&lt;br /&gt;
* [[DID Management]]&lt;br /&gt;
** [[Assign DID to Trunk]]&lt;br /&gt;
* [[Work flow for DID]]&lt;br /&gt;
* [[DID Billing]]&lt;br /&gt;
** [[DID Billing Time explained]]&lt;br /&gt;
* [[DIDs Usage]]&lt;br /&gt;
* [[Personal DIDs]]&lt;br /&gt;
* [[Example - Configuring DID to ring some Device]]&lt;br /&gt;
* [[PBX Function External DID]]&lt;br /&gt;
* [[Ring-Groups]]&lt;br /&gt;
* [[DID with VoxBone using his URI]]&lt;br /&gt;
* [[Forward DID to External Number]]&lt;br /&gt;
* [[How to charge DID on a monthly basis]]&lt;br /&gt;
* [[DID handling by Localization]]&lt;br /&gt;
* [[DID Blocking]]&lt;br /&gt;
* [[Dial Plans]]&lt;br /&gt;
** [[Authorization by PIN]]&lt;br /&gt;
** [[Authorization by ANI]]&lt;br /&gt;
** [[Calling Card Dial Plan]]&lt;br /&gt;
** [[Callback Dial Plan]]&lt;br /&gt;
** [[IVR Dial Plan]]&lt;br /&gt;
** [[STATISTICS - Various - DIDs]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[Accounting]] =&lt;br /&gt;
* [[Services]]&lt;br /&gt;
** [[Flat-Rates]]&lt;br /&gt;
* [[Subscriptions]]&lt;br /&gt;
* [[Invoices]]&lt;br /&gt;
** [[Invoice configuration]]&lt;br /&gt;
** [[Pay Invoice with balance deduction]]&lt;br /&gt;
** [[Invoice by CallerID]]&lt;br /&gt;
* [[Payments]]&lt;br /&gt;
* [[Vouchers]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Reporting =&lt;br /&gt;
* [[Active Calls]]&lt;br /&gt;
* [[Last Calls]]&lt;br /&gt;
* [[Local Calls Stats]]&lt;br /&gt;
* [[Users Calls]]&lt;br /&gt;
* [[Users Finances]]&lt;br /&gt;
* [[Loss Making Calls]]&lt;br /&gt;
* [[DIDs Report]]&lt;br /&gt;
* [[Providers Statistics]]&lt;br /&gt;
* [[Providers Calls]]&lt;br /&gt;
* [[Statement Of Account]]&lt;br /&gt;
* [[Aggregate]]&lt;br /&gt;
* [[First Activity]]&lt;br /&gt;
* [[Quick Stats]]&lt;br /&gt;
* [[Simultaneous Calls stats]]&lt;br /&gt;
* [[Calls by Source]]&lt;br /&gt;
* [[Login Stats]]&lt;br /&gt;
* [[Profit Stats]]&lt;br /&gt;
* [[Country Stats]]&lt;br /&gt;
* [[Hangup Cause Report]]&lt;br /&gt;
* [[Graphs]]&lt;br /&gt;
* [[Google Maps integration]]&lt;br /&gt;
** [[Get Google Maps key]]&lt;br /&gt;
* [[Balance in phone]]&lt;br /&gt;
* [[Privacy to hide Destination ends]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
&lt;br /&gt;
* [[Frequently_Asked_Questions_(FAQ) | Frequently Asked Questions]]&lt;br /&gt;
* [[Action log]]&lt;br /&gt;
* [[Call Tracing]]&lt;br /&gt;
* [[Integrity Check]]&lt;br /&gt;
* [[Hangupcause Codes]]&lt;br /&gt;
** [[H323 hangupcause codes]]&lt;br /&gt;
** [[Hangupcause Sounds]]&lt;br /&gt;
** [[Different code send to User compared to received from Provider]]&lt;br /&gt;
* [[Call Info]]&lt;br /&gt;
** [[Call log explanation]]&lt;br /&gt;
* [[SIP debug info]]&lt;br /&gt;
* [[Provider connection testing]]&lt;br /&gt;
* [[Asterisk CLI]]&lt;br /&gt;
** [[Watch active calls/channels in Asterisk server from CLI]]&lt;br /&gt;
** [[Get Asterisk CLI output for specific call]]&lt;br /&gt;
* [[MOR's Core version]]&lt;br /&gt;
* [[Lots of calls made by System Admin user]]&lt;br /&gt;
* [[Renew Devices]]&lt;br /&gt;
* [[Email log]]&lt;br /&gt;
* [[MOR forward Q.850 Reason header]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Maintenance = &lt;br /&gt;
&lt;br /&gt;
* [[How to restart Asterisk server]]&lt;br /&gt;
* [[Upgrade MOR GUI]]&lt;br /&gt;
* [[Lost MOR GUI admin password]]&lt;br /&gt;
* [[MOR Server Speedup]]&lt;br /&gt;
* [[Second Admin account]]&lt;br /&gt;
* [[Asterisk keepalive script]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Security =&lt;br /&gt;
* [[How to be secure using MOR]]&lt;br /&gt;
* [[MOR Change default passwords]]&lt;br /&gt;
* [[Blocking SIP Scanners]]&lt;br /&gt;
* [[MOR iptables Chains]]&lt;br /&gt;
* [[MOR two factor authentication]]&lt;br /&gt;
* [[How to set up SSL certificate with Let's Encrypt]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Testing =&lt;br /&gt;
&lt;br /&gt;
* [[VoIP Bandwidth Calculator]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Payment gateways =&lt;br /&gt;
&lt;br /&gt;
* [[Payment_Gateway_Addon | Payments Gateway Addon]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Other functionality =&lt;br /&gt;
* [[SIP Header Manipulation]]&lt;br /&gt;
* [[IVR system]]&lt;br /&gt;
** [[IVR for Calling Cards]]&lt;br /&gt;
** [[IVR Greeting for DID]]&lt;br /&gt;
* [[Callback]]&lt;br /&gt;
** [[WEB Callback]]&lt;br /&gt;
** [[Callback over Email]]&lt;br /&gt;
** [[MOR API callback init | API Callback_init]]&lt;br /&gt;
** [[Callback setup example]]&lt;br /&gt;
* [[PBX Functions]]&lt;br /&gt;
** [[Voicemail]]&lt;br /&gt;
** [[Dial Local]]&lt;br /&gt;
** [[PBX Function External DID|External DID]]&lt;br /&gt;
* [[Fax2Email]]&lt;br /&gt;
* [[Recordings Addon | Recordings]]&lt;br /&gt;
* [[PhoneBook]]&lt;br /&gt;
* [[Speed Dials]]&lt;br /&gt;
* [[Backup system]]&lt;br /&gt;
* [[Data import]]&lt;br /&gt;
* CDR&lt;br /&gt;
** [[CDR Import]]&lt;br /&gt;
** [[CDR Rerating]]&lt;br /&gt;
** [[CDR Disputes|CDR Disputes]]&lt;br /&gt;
* [[Online registration]]&lt;br /&gt;
** [[Online registration customization]]&lt;br /&gt;
* [[Quick Forwards]]&lt;br /&gt;
** [[Quickforwards rules]]&lt;br /&gt;
* [[Transfers with MOR]]&lt;br /&gt;
* [[GUI on Mobile Devices]]&lt;br /&gt;
* [[PBX connection to MOR]]&lt;br /&gt;
** [[MOR and Trixbox]]&lt;br /&gt;
* [[MOR API]]&lt;br /&gt;
** [[MOR API Permission Groups]]&lt;br /&gt;
** [[API Configuration]]&lt;br /&gt;
* [[Cron actions]]&lt;br /&gt;
* [[Webhooks]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= [[MOR Addons|'''MOR Addons''']] =&lt;br /&gt;
* [[Limited Addons]]&lt;br /&gt;
* [[Automatic Tariff Import]]&lt;br /&gt;
* [[Auto-Dialer Addon]]&lt;br /&gt;
* [[Call Shop Addon]] &lt;br /&gt;
* [[Callback|Callback Addon]] &lt;br /&gt;
* [[Calling Cards Addon]]&lt;br /&gt;
* [[Mobile Number Portability Addon]]&lt;br /&gt;
* [[Monitorings Addon]]&lt;br /&gt;
** [[Spy_real-time_calls|Spy real-time calls]]&lt;br /&gt;
** [[Alerts]]&lt;br /&gt;
** [[Alert Groups]]&lt;br /&gt;
** [[Alert Schedules]]&lt;br /&gt;
** [[Dynamic Blacklist Functionality]]&lt;br /&gt;
* [[Payment Gateway Addon]]&lt;br /&gt;
* [[Recordings Addon]]&lt;br /&gt;
* [[Reseller Addon]]&lt;br /&gt;
* [[Reseller Pro Addon]]&lt;br /&gt;
* [[PBX_Functions_Addon | PBX Functions Addon]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Tutorials = &lt;br /&gt;
* [[Usual configuration sequence]]&lt;br /&gt;
** [[How to make first call]]&lt;br /&gt;
* [[How to create User and Device]]&lt;br /&gt;
* [[Dial Local | How to setup Dial Local function]]&lt;br /&gt;
* [[Calling Card setup example | How to setup Calling Cards]]&lt;br /&gt;
** [[How to setup Access Number to TopUp Card by CallerID]]&lt;br /&gt;
* [[Callback setup example | How to setup Callback]]&lt;br /&gt;
* [[Conference with MOR + Trixbox | How to setup Conferences using Trixbox]]&lt;br /&gt;
* [[How to forward the Call when Device is offline]]&lt;br /&gt;
* IVRs&lt;br /&gt;
** [[IVR for Calling Cards | How to setup IVR for Calling Cards]]&lt;br /&gt;
* DIDs&lt;br /&gt;
** [[Example - Configuring DID to ring some Device | How to configure DID to ring some Device]]&lt;br /&gt;
** [[Forward DID to External Number | How to forward DID to External Number]]&lt;br /&gt;
** [[How to charge DID on a monthly basis]]&lt;br /&gt;
** [[IVR Greeting for DID|How to add Greeting for DID]]&lt;br /&gt;
* [[How to configure 911 service]]&lt;br /&gt;
* [[Block some Destination to User | How to block a Destination to a User]]&lt;br /&gt;
* [[How to make several connections from one IP]]&lt;br /&gt;
* [[How to be secure using MOR]]&lt;br /&gt;
* [[How to change GUI port]]&lt;br /&gt;
* [[How to change qualify packets frequency]]&lt;br /&gt;
* [[MOR 10CC]]&lt;br /&gt;
* [[VitalPBX interconnection with MOR]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Old Manuals =&lt;br /&gt;
* [http://packets.kolmisoft.com/packets/docs/MOR_X4_Manual.pdf MOR X4 Manual]&lt;br /&gt;
* [http://packets.kolmisoft.com/packets/docs/MOR_X3_Manual.pdf MOR X3 Manual]&lt;br /&gt;
* [http://packets.kolmisoft.com/packets/docs/MOR_12_Manual.pdf MOR 12 Manual]&lt;br /&gt;
* [http://packets.kolmisoft.com/packets/docs/MOR_11_Manual.pdf MOR 11 Manual]&lt;br /&gt;
* [http://packets.kolmisoft.com/packets/docs/MOR_10_Manual.pdf MOR 10 Manual]&lt;br /&gt;
* [[Material for testing users]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=Alerts&amp;diff=31662</id>
		<title>Alerts</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=Alerts&amp;diff=31662"/>
		<updated>2026-06-11T10:28:22Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Alert vs Clear */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Description=&lt;br /&gt;
&amp;lt;!---This functionality is available from MOR X4---&amp;gt;&lt;br /&gt;
Alerts functionality is dedicated to taking actions about your system issues which may cause a problem. You may block User, disable Provider, change LCR for User or simply send a notification to specified [[Alert Groups|Group]] of [[Alert Contacts|Contacts]]. &lt;br /&gt;
&lt;br /&gt;
You are able to follow these parameters:&lt;br /&gt;
&lt;br /&gt;
* [[ASR/ACD|ASR]] – Answer-Seizure Ratio (percent)&lt;br /&gt;
* [[ASR/ACD|ACD]] – Average Call Duration (in seconds)&lt;br /&gt;
* PDD – Average Post Dial Delay. The time between punching in the last digit of a telephone number and receiving a ring or busy signal (in seconds)&lt;br /&gt;
* TTC (Time to Connect)(DURATION-BILLSEC) – Average time between receiving a ring signal and answer to the call (in seconds)&lt;br /&gt;
* BILLSEC – Sum of calls bilsec (in seconds)&lt;br /&gt;
* TOTAL CALLS – Sum of all calls.&lt;br /&gt;
* TOTAL OUTGOING CALLS – Sum of outgoing calls.&lt;br /&gt;
* ANSWERED CALLS – Sum of answered calls.&lt;br /&gt;
* NOT ANSWERED CALLS – Sum of not answered calls (FAILED, BUSY, NO ANSWER).&lt;br /&gt;
* SIMULTANEOUS CALLS – Number of simultaneous calls (only applies to users and providers).&lt;br /&gt;
* PRICE SUM – Sum of calls price (only applies to users and providers).&lt;br /&gt;
* HGC (absolute) – Sum of calls, which ended with a specific [[Hangupcause_Codes | Hangupcause code]]. The HGC has to be set in the ''HGC'' field (it appears once ''Parameter: HGC'' is chosen).&lt;br /&gt;
* HGC (percent) – Percent of calls, which ended with a specific [[Hangupcause_Codes | Hangupcause code]]. The HGC has to be set in the ''HGC'' field (it appears once ''Parameter: HGC'' is chosen).&lt;br /&gt;
* REGISTRATION - Device registration status (either registered or not).&lt;br /&gt;
And it is possible to make actions for these types of MOR Objects or send notification about it:&lt;br /&gt;
&lt;br /&gt;
* [[Users]]&lt;br /&gt;
** All&lt;br /&gt;
** Postpaid&lt;br /&gt;
** Prepaid&lt;br /&gt;
** One User&lt;br /&gt;
* [[Providers]]&lt;br /&gt;
* [[Devices]]&lt;br /&gt;
* [[Directions and Destinations | Destinations]]&lt;br /&gt;
** One Destination by prefix.&lt;br /&gt;
** Few Destinations by prefix and % sign. Eg. 93%, 3706% and so on.&lt;br /&gt;
* [[Destinations Groups]]&lt;br /&gt;
* System&lt;br /&gt;
** Any call made will be assigned to System object (even unauthenticated calls). Useful for general System monitoring.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
Go to '''ADDONS –&amp;gt; Monitorings –&amp;gt; Alerts'''&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:alerts_path.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Here you can see list of all created Alerts and their main information like is Alert active? When it was Raised/Cleared last time? What value was at Alert/Clear...&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:alerts_list.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Click on [[Image:icon_add.png]]'''Add new Alert''' link to create an Alert or click on [[image:icon_edit.png]] icon to change settings of existing Alert.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Mor_alerts_edit_4.png|right]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''General'''&lt;br /&gt;
&lt;br /&gt;
* '''Name''' – Alert name.&lt;br /&gt;
* '''Object Type''' – select which Object you want to follow.&lt;br /&gt;
* '''Object Name''' – pecify name/prefix of Object.&lt;br /&gt;
* '''Parameter''' – choose which parameter should be followed.&lt;br /&gt;
* '''Alert Type''' – ABS means that absolute data values will be taken from specified time period.&lt;br /&gt;
'''NOTE''': Object Type, Object Name, Parameter, Alert Type cannot be changed once Alert is created. &lt;br /&gt;
* '''Ignore if Calls''' &amp;lt;= – indicate calls sum when system should ignore Alert if calls sum is less than written (if 0, Alert will not be ignored). &lt;br /&gt;
* '''Ignore if Calls''' &amp;gt;= – indicate calls sum when system should ignore Alert if calls sum is more than written (if 0, Alert will not be ignored). &lt;br /&gt;
* '''Group to Notify''' – select [[Alert Groups|Group]] of [[Alert Contacts|Contacts]] who should be informed about Alert/clear.&lt;br /&gt;
* '''Notify to User''' – it is available only when Alert object type is User or Device. Check if you want to notify User on Alert.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Alert'''&lt;br /&gt;
&lt;br /&gt;
* '''Alert if &amp;lt;=''' – indicate Parameter value when system should raise Alert if value is less than written. &lt;br /&gt;
* '''Alert if &amp;gt;=''' – indicate Parameter value when system should raise Alert if value is more than written. &lt;br /&gt;
* '''Disable Object''' – check if you want to disable selected Object on Alert.&lt;br /&gt;
* '''Disable Provider in LCR'''  – indicate LCR where Provider should be disabled.&lt;br /&gt;
* '''LCR on Alert''' – select LCR which one should be used after Alert&lt;br /&gt;
* '''Notify On Alert via Email''' – check if you want that specified [[Alert Groups|Group]] will receive an email notifications about Alerts.&lt;br /&gt;
* '''Notify On Alert via Webhook''' – when set, the alert will send a webhook to all Contacts in Alert Group that have non-empty Webhook URL. More info [https://wiki.kolmisoft.com/index.php/Alerts#Webhook_notifications here].&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Clear'''&lt;br /&gt;
&lt;br /&gt;
* '''Disable Clear''' – when alert is raised, it will never be cleared.&lt;br /&gt;
* '''Clear on Condition'''&lt;br /&gt;
** '''Clear if &amp;lt;=''' – indicate Parameter value when system should Clear Alert if value is less than written. &lt;br /&gt;
** '''Clear if &amp;gt;=''' – indicate Parameter value when system should Clear Alert if value is more than written. &lt;br /&gt;
* '''Clear on time basis'''&lt;br /&gt;
** '''Clear after''' – indicate time value after which system should Clear Alert&lt;br /&gt;
** '''Clear on Date''' – indicate specific date and time when system should Clear Alert (After clear, selection will be reset)&lt;br /&gt;
* '''Enable Object''' – check if you want to enable selected(in Alert configuration) Object on Clear.&lt;br /&gt;
* '''Enable Provider in LCR''' – check if you want to enable selected(in Alert configuration) Provider on Clear.&lt;br /&gt;
* '''LCR on Clear''' – select LCR which one should be used after Clear.&lt;br /&gt;
* '''Notify On Clear via Email''' – check if you want that specified [[Alert Groups|Group]] will receive an email notifications about Clear.&lt;br /&gt;
* '''Notify On Alert via Webhook''' – when set, the alert will send a webhook to all Contacts in Alert Group that have non-empty Webhook URL. More info [https://wiki.kolmisoft.com/index.php/Alerts#Webhook_notifications here].&lt;br /&gt;
&lt;br /&gt;
'''NOTE''' one of '''Clear on Condition''' options and both '''Clear on time basis''' options can be selected at one time. System will clear alert if at least one of conditions will be true, it means that alert will be cleared on condition which first will appear. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Period'''&lt;br /&gt;
&lt;br /&gt;
You can select different time periods for each alert. This period defines time period which activity have to be checked. &lt;br /&gt;
&lt;br /&gt;
Note: period has no effect when parameter SIMULTANEOUS CALLS is chosen.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Comment''' – additional notes. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Webhook notifications =&lt;br /&gt;
&lt;br /&gt;
When an alert is raised or cleared and options '''Notify On Alert via Webhook''' or '''Notify On Clear via Webhook''' in the Alert are enabled, a HTTP request will be sent to each Contact in the Alert Group that has '''Webhook''' URL set. The request uses HTTP POST with JSON payload (Content-Type: application/json).&lt;br /&gt;
&lt;br /&gt;
JSON Payload:&lt;br /&gt;
&lt;br /&gt;
* '''type''' - Alert trigger type, either &amp;quot;ALERT&amp;quot; or &amp;quot;CLEAR&amp;quot;.&lt;br /&gt;
* '''group_id''' - Alert Group ID.&lt;br /&gt;
* '''alert_id''' - Alert ID.&lt;br /&gt;
* '''alert_name''' - Alert name.&lt;br /&gt;
* '''object_id''' - ID of checked Object.&lt;br /&gt;
* '''object_name''' - human-readable Object name.&lt;br /&gt;
* '''cause''' - Alert type.&lt;br /&gt;
* '''value''' - current value.&lt;br /&gt;
* '''count''' - data count.&lt;br /&gt;
* '''timestamp''' - timestamp when Alert/Clear triggered.&lt;br /&gt;
&lt;br /&gt;
Example payload:&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;type&amp;quot;: &amp;quot;ALERT&amp;quot;,&lt;br /&gt;
   &amp;quot;group_id&amp;quot;: 12,&lt;br /&gt;
   &amp;quot;alert_id&amp;quot;: 42,&lt;br /&gt;
   &amp;quot;alert_name&amp;quot;: &amp;quot;Test&amp;quot;,&lt;br /&gt;
   &amp;quot;object_id&amp;quot;: 123,&lt;br /&gt;
   &amp;quot;object_name&amp;quot;: &amp;quot;Example OP&amp;quot;,&lt;br /&gt;
   &amp;quot;cause&amp;quot;: &amp;quot;CALLS TOTAL&amp;quot;,&lt;br /&gt;
   &amp;quot;value&amp;quot;: 150.0,&lt;br /&gt;
   &amp;quot;count&amp;quot;: 150,&lt;br /&gt;
   &amp;quot;timestamp&amp;quot;: &amp;quot;2026-02-26 12:34:56&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Alert vs Clear =&lt;br /&gt;
&lt;br /&gt;
Example with CPU Load, just to demonstrate what an Alert is, what a Clear is, and their proper usage.&lt;br /&gt;
&lt;br /&gt;
[[File:alert_graph.png]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Examples=&lt;br /&gt;
&lt;br /&gt;
===Send notification and change LCR on Alert===&lt;br /&gt;
&lt;br /&gt;
Parameter: TOTAL CALLS &amp;lt;br&amp;gt;&lt;br /&gt;
Object Type: User &amp;lt;br&amp;gt;&lt;br /&gt;
Object Name: Prepaid &amp;lt;br&amp;gt;&lt;br /&gt;
Alert if &amp;gt;=: 300 &amp;lt;br&amp;gt;&lt;br /&gt;
Clear if &amp;lt;=: 200 &amp;lt;br&amp;gt;&lt;br /&gt;
LCR on alert: secondary LCR &amp;lt;br&amp;gt;&lt;br /&gt;
LCR on clear: Restore Original &amp;lt;br&amp;gt;&lt;br /&gt;
Group to Notify: support group &amp;lt;br&amp;gt;&lt;br /&gt;
Notify on Alert via Email: checked &amp;lt;br&amp;gt;&lt;br /&gt;
Period: 1h &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This Alert monitors all Calls done by Prepaid Users. If a Prepaid User makes more than 300 Calls during one hour period, his LCR will be changed to secondary LCR and Email notification will be sent to every contact on support group.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
If User's Call count drops below 200 calls during one hour period, his LCR will be restored to original LCR&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Block user when simultaneous calls are detected===&lt;br /&gt;
&lt;br /&gt;
Parameter: SIMULTANEOUS CALLS &amp;lt;br&amp;gt;&lt;br /&gt;
Object Type: User &amp;lt;br&amp;gt;&lt;br /&gt;
Object Name: All &amp;lt;br&amp;gt;&lt;br /&gt;
Alert if &amp;gt;=: 2 &amp;lt;br&amp;gt;&lt;br /&gt;
Group to Notify: administration &amp;lt;br&amp;gt;&lt;br /&gt;
Notify on Alert via Email: checked &amp;lt;br&amp;gt;&lt;br /&gt;
Disable Object: checked &amp;lt;br&amp;gt;&lt;br /&gt;
Disable Clear: checked &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This Alert monitors simultaneous calls done by all Users. If a User makes more than (or equal to) 2 simultaneous Calls to the same destination, his account will be suspended and Email notification will be sent to every contact on administration group.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
This alert will no be cleared automatically and user will stay suspended even if no more simultaneous calls are present.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Block user if it spends more than 50 EUR in 24h===&lt;br /&gt;
&lt;br /&gt;
Parameter: PRICE SUM &amp;lt;br&amp;gt;&lt;br /&gt;
Object Type: User &amp;lt;br&amp;gt;&lt;br /&gt;
Object Name: All &amp;lt;br&amp;gt;&lt;br /&gt;
Alerf if &amp;gt;= 50 &amp;lt;br&amp;gt;&lt;br /&gt;
Group to Notify: administration &amp;lt;br&amp;gt;&lt;br /&gt;
Notify on Alert via Email: checked &amp;lt;br&amp;gt;&lt;br /&gt;
Disable Object: checked &amp;lt;br&amp;gt;&lt;br /&gt;
Disable Clear: checked &amp;lt;br&amp;gt;&lt;br /&gt;
Check last: 24 h &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Alerts triggered by other Alerts===&lt;br /&gt;
&lt;br /&gt;
Administrators are able to create alerts that depend on other alerts. What that means is, that you are able to create an alert that is triggered by a set or a subset of other alerts.&lt;br /&gt;
&lt;br /&gt;
'''Example:'''&lt;br /&gt;
* Alert 1 is triggered when a specific user's ACD drops below ten seconds.&lt;br /&gt;
* Alert 2 is triggered when a the same user's Device's ASR drops below 50%.&lt;br /&gt;
* Alert 3 is triggered when both Alert 1 and Alert 2 is triggered, so that the technicians are notified.&lt;br /&gt;
&lt;br /&gt;
In order to set up such a chain of events, you should first create Alert 1 and Alert 2.&lt;br /&gt;
&lt;br /&gt;
Then, you should set up Alert 3.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Alert_group_parameter.png‎]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Configure your alert as usual, but instead of a specific parameter choose GROUP.&lt;br /&gt;
* Then, add the alert dependencies using the shown interface.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Alert_group_alert.png‎]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Set a number of alerts, that, when reached will trigger the alert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Alert_group_clear.png‎]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
* Finally set up a number of alerts that will clear your alert.&lt;br /&gt;
&lt;br /&gt;
These alerts can also be nested, without worrying about circular-dependencies, '''MOR''' simply will not let you make them.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=See also=&lt;br /&gt;
&lt;br /&gt;
* [[Alert Schedules]]&lt;br /&gt;
* [[Alert Groups]]&lt;br /&gt;
* [[Alert Contacts]]&lt;br /&gt;
* [[ASR/ACD]]&lt;br /&gt;
* [[How to resolve long PDD]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_v2_tariff_rates&amp;diff=31657</id>
		<title>MOR API v2 tariff rates</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_v2_tariff_rates&amp;diff=31657"/>
		<updated>2026-06-03T18:52:17Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;Returns the complete rate table for a tariff — retail destination groups with time-banded prices, optional custom rates, or wholesale/provider flat rate rows. Not prefix rate lookup — that is MOR API v2 rates (&amp;lt;code&amp;gt;GET /rates&amp;lt;/code&amp;gt;). Parity with legacy MOR API tariff rates get (&amp;lt;code&amp;gt;tariff_rates_get&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;get_tariff&amp;lt;/code&amp;gt;).  Retail behaviour matches the end-user GUI '''Rates''' screen (&amp;lt;code&amp;gt;/tariffs/user_rates&amp;lt;/code&amp;gt;). Wholesale/provider behavio...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Returns the complete rate table for a tariff — retail destination groups with time-banded prices, optional custom rates, or wholesale/provider flat rate rows. Not prefix rate lookup — that is [[MOR API v2 rates]] (&amp;lt;code&amp;gt;GET /rates&amp;lt;/code&amp;gt;). Parity with legacy [[MOR API tariff rates get]] (&amp;lt;code&amp;gt;tariff_rates_get&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;get_tariff&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Retail behaviour matches the end-user GUI '''Rates''' screen (&amp;lt;code&amp;gt;/tariffs/user_rates&amp;lt;/code&amp;gt;). Wholesale/provider behaviour matches '''SETTINGS → Tariffs''' → open a tariff → '''Rates for tariff'''.&lt;br /&gt;
&lt;br /&gt;
Simple portal users call without &amp;lt;code&amp;gt;tariff_id&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;user_id&amp;lt;/code&amp;gt; to receive their own tariff. Admin, reseller, and accountant callers may pass &amp;lt;code&amp;gt;user_id&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;tariff_id&amp;lt;/code&amp;gt; per the rules below. For &amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;accountant&amp;lt;/code&amp;gt; callers, &amp;lt;code&amp;gt;tariff_id&amp;lt;/code&amp;gt; is ignored when &amp;lt;code&amp;gt;user_id&amp;lt;/code&amp;gt; is omitted — the JWT user's tariff is returned (legacy parity).&lt;br /&gt;
&lt;br /&gt;
All endpoints require a valid Bearer token (see [[MOR API v2]] authentication), user type '''admin''', '''reseller''', '''accountant''', or '''user''', and &amp;lt;code&amp;gt;v2_tariff_rates_index&amp;lt;/code&amp;gt; (Read) on the user's [[MOR API Permission Groups|API permission group]] (section '''Tariffs''').&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Quick start ==&lt;br /&gt;
&lt;br /&gt;
Obtain a token, then (portal retail user):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -s -H &amp;quot;Authorization: Bearer $TOKEN&amp;quot; \&lt;br /&gt;
  &amp;quot;https://your-mor.example/billing/api/v2/tariff_rates?additional_retail_info=1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wholesale or provider tariffs require pagination:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -s -H &amp;quot;Authorization: Bearer $TOKEN&amp;quot; \&lt;br /&gt;
  &amp;quot;https://your-mor.example/billing/api/v2/tariff_rates?tariff_id=14&amp;amp;page=1&amp;amp;limit=100&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Endpoint ==&lt;br /&gt;
&lt;br /&gt;
Base path: &amp;lt;code&amp;gt;{Web_Dir}/api/v2/tariff_rates&amp;lt;/code&amp;gt; (for example &amp;lt;code&amp;gt;/billing/api/v2/tariff_rates&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Method !! Path !! Permission !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/tariff_rates&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;v2_tariff_rates_index&amp;lt;/code&amp;gt; || Full tariff rate export.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Query parameters ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;user_id&amp;lt;/code&amp;gt; — optional. Load the tariff (and custom rates) for another user. Admin, reseller, and accountant use cases; portal users typically omit this.&lt;br /&gt;
* &amp;lt;code&amp;gt;tariff_id&amp;lt;/code&amp;gt; — optional. Select a tariff by ID when the caller is admin or reseller (and not using &amp;lt;code&amp;gt;user_id&amp;lt;/code&amp;gt; only). Ignored for &amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;accountant&amp;lt;/code&amp;gt; when &amp;lt;code&amp;gt;user_id&amp;lt;/code&amp;gt; is blank.&lt;br /&gt;
* &amp;lt;code&amp;gt;additional_retail_info&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;; default &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. When &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, each retail/custom destination group includes nested destination &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;prefix&amp;lt;/code&amp;gt; rows.&lt;br /&gt;
* &amp;lt;code&amp;gt;page&amp;lt;/code&amp;gt; — required for wholesale/provider tariffs. 1-based page number.&lt;br /&gt;
* &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; — required for wholesale/provider tariffs. Page size (maximum 500).&lt;br /&gt;
&lt;br /&gt;
Retail and custom-rate responses are not paginated. Wholesale/provider responses without &amp;lt;code&amp;gt;page&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt; return '''422'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Response shape ==&lt;br /&gt;
&lt;br /&gt;
Top-level object: &amp;lt;code&amp;gt;{ &amp;quot;tariff_rates&amp;quot;: { … } }&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Retail (&amp;lt;code&amp;gt;purpose&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt;):''' &amp;lt;code&amp;gt;tariff_name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;purpose&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;currency&amp;lt;/code&amp;gt;, optional &amp;lt;code&amp;gt;custom_rates&amp;lt;/code&amp;gt; (same structure), then &amp;lt;code&amp;gt;destinations&amp;lt;/code&amp;gt; — each with &amp;lt;code&amp;gt;destination_group_name&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;rates&amp;lt;/code&amp;gt; (duration, type, round_by, rate, start_time, end_time, daytype, from). When custom rates exist, custom groups are listed first; tariff groups already covered by custom rates are omitted. If the user has custom rates but no assigned tariff, the response may contain only &amp;lt;code&amp;gt;custom_rates&amp;lt;/code&amp;gt; (HTTP '''200''').&lt;br /&gt;
&lt;br /&gt;
'''Wholesale / provider:''' flat &amp;lt;code&amp;gt;rates&amp;lt;/code&amp;gt; array (direction, destination, prefix, code, rate, connection_fee, increment, min_time, start_time, end_time, daytype, effective_from) plus &amp;lt;code&amp;gt;meta&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;page&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;returned&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;total&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Currency and time values follow legacy API conventions (system currency; time strings; wholesale &amp;lt;code&amp;gt;rate&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;connection_fee&amp;lt;/code&amp;gt; formatted like legacy XML wholesale export).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Example (retail fragment) ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;tariff_rates&amp;quot;: {&lt;br /&gt;
    &amp;quot;tariff_name&amp;quot;: &amp;quot;My Tariff&amp;quot;,&lt;br /&gt;
    &amp;quot;purpose&amp;quot;: &amp;quot;user&amp;quot;,&lt;br /&gt;
    &amp;quot;currency&amp;quot;: &amp;quot;USD&amp;quot;,&lt;br /&gt;
    &amp;quot;destinations&amp;quot;: [&lt;br /&gt;
      {&lt;br /&gt;
        &amp;quot;destination_group_name&amp;quot;: &amp;quot;Lithuania&amp;quot;,&lt;br /&gt;
        &amp;quot;rates&amp;quot;: [&lt;br /&gt;
          {&lt;br /&gt;
            &amp;quot;duration&amp;quot;: &amp;quot;Infinity&amp;quot;,&lt;br /&gt;
            &amp;quot;type&amp;quot;: &amp;quot;minute&amp;quot;,&lt;br /&gt;
            &amp;quot;round_by&amp;quot;: &amp;quot;1&amp;quot;,&lt;br /&gt;
            &amp;quot;rate&amp;quot;: &amp;quot;0.05&amp;quot;,&lt;br /&gt;
            &amp;quot;start_time&amp;quot;: &amp;quot;00:00:00&amp;quot;,&lt;br /&gt;
            &amp;quot;end_time&amp;quot;: &amp;quot;23:59:59&amp;quot;,&lt;br /&gt;
            &amp;quot;daytype&amp;quot;: &amp;quot;WD&amp;quot;,&lt;br /&gt;
            &amp;quot;from&amp;quot;: &amp;quot;0&amp;quot;&lt;br /&gt;
          }&lt;br /&gt;
        ]&lt;br /&gt;
      }&lt;br /&gt;
    ]&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Errors ==&lt;br /&gt;
&lt;br /&gt;
* '''401''' — Missing or invalid token, usertype not allowed, or API permission denied: &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;Unauthorized&amp;quot; }&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;API method not permitted: v2_tariff_rates_index&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''404''' — No tariff resolved: &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;No tariff found&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''422''' — Wholesale/provider tariff without &amp;lt;code&amp;gt;page&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;limit&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;page and limit are required for wholesale tariffs&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[MOR API tariff rates get]] — legacy XML/hash full tariff export&lt;br /&gt;
* [[MOR API v2 rates]] — prefix rate lookup (&amp;lt;code&amp;gt;GET /rates&amp;lt;/code&amp;gt;), not full tariff table&lt;br /&gt;
* [[MOR API Permission Groups]] — enable &amp;lt;code&amp;gt;v2_tariff_rates_index&amp;lt;/code&amp;gt; for integrators&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_v2&amp;diff=31656</id>
		<title>MOR API v2</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_v2&amp;diff=31656"/>
		<updated>2026-06-03T18:52:05Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* APIs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=About=&lt;br /&gt;
MOR API lets other software interact with MOR without knowing the internal structure of the database (DB) and other logic.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=MOR users that are allowed to use the MOR API=&lt;br /&gt;
* Admin&lt;br /&gt;
* Reseller&lt;br /&gt;
* Accountant&lt;br /&gt;
* Simple User&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Client IP restriction (optional) =&lt;br /&gt;
&lt;br /&gt;
Administrators can limit API use by client IPv4 address: enable '''Restrict API access by IP''' under [[Configuration from GUI]] (together with '''Allow API globally'''), then mark which addresses may call the API on [[Whitelisted IPs]] ('''Allow API access''' per row). When the restriction is off, API behavior is unchanged. Details: configuration in [[Configuration from GUI]]; per-IP flags on [[Whitelisted IPs]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
Open the GUI using the MOR IP/domain http://IP_or_Domain/billing/api/v2/api-docs/.&lt;br /&gt;
&lt;br /&gt;
Press on '''Authorize''' and enter User credentials (Admin, Manager, Reseller, or User) into the '''basicAuth''' field and press '''Authorize'''.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_basicAuth.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_basicAuth_login.png]] &lt;br /&gt;
&lt;br /&gt;
Copy the token and use it for JWT authentication.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth_execute.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth_token.png]]&lt;br /&gt;
&lt;br /&gt;
Enter the token into the '''bearerAuthorization''' authorization field and press '''Authorize'''.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_bearerAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
You can now use the available APIs. Expand them to see the documentation.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=APIs=&lt;br /&gt;
&lt;br /&gt;
==Account==&lt;br /&gt;
* [[MOR_API_v2_me|me]] - Read and update the authenticated user's profile (GET/PATCH /me)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Active Calls==&lt;br /&gt;
* [[MOR_API_drop_active_calls|drop_active_calls]] - drop active calls.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Balance==&lt;br /&gt;
* [[MOR_API_v2_balance|balance]] - Show the authenticated user's prepaid balance (GET &amp;lt;code&amp;gt;/balance&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Calls==&lt;br /&gt;
* [[MOR_API_v2_Calls|retrieve_calls]] - retrieves the list of calls in the selected time period for the specified User/Device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==CDR Export==&lt;br /&gt;
* [[MOR_API_v2_cdr_export_templates|cdr_export_templates]] - List [[CDR Export Templates]] for the authenticated admin (read-only).&lt;br /&gt;
* [[MOR_API_v2_automatic_cdr_exports|automatic_cdr_exports]] - Manage scheduled automatic CDR export tasks: create, update, delete, and set active state (admin only).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DIDs ==&lt;br /&gt;
* [[MOR API v2 DIDs|dids]] — list DIDs visible to the authenticated admin or accountant (JSON).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Flash Calls==&lt;br /&gt;
* [[MOR API flash calls|flash_calls]] - initiate a Flash Call.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Tariffs/Rates==&lt;br /&gt;
* [[MOR API v2 rates|rates]] - Look up call rates for a dialed prefix (GET &amp;lt;code&amp;gt;/rates&amp;lt;/code&amp;gt;).&lt;br /&gt;
* [[MOR API v2 tariff rates|tariff_rates]] - Export the full tariff rate table (GET &amp;lt;code&amp;gt;/tariff_rates&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Ring Groups ==&lt;br /&gt;
* [[MOR API v2 ring_groups|ring_groups]] - List ring groups with member device extensions and caller IDs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Security==&lt;br /&gt;
&lt;br /&gt;
* [[MOR API v2 blocked_ips|blocked_ips]] - Manage [[MOR - Blocked IPs]].&lt;br /&gt;
* [[MOR API v2 whitelisted_ips|whitelisted_ips]] - Manage [[Whitelisted IPs]].&lt;br /&gt;
* [[MOR API IP access|ip_access]] - Read-only check whether an IPv4 address appears in MOR Monitorings block/whitelist lists.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Users ==&lt;br /&gt;
&lt;br /&gt;
* '''[[MOR API v2 user_assign_provider|user_assign_provider]]''' — Assign or unassign an unassigned [[Providers|provider]] to a simple [[Users|user]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==AI Transcriptions==&lt;br /&gt;
* [[MOR API Transcriptions AI|AI Transcriptions]] - recording voice-to-text.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_v2_rates&amp;diff=31655</id>
		<title>MOR API v2 rates</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_v2_rates&amp;diff=31655"/>
		<updated>2026-06-03T18:16:48Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;Look up call rates for a destination prefix. Default behaviour matches the MOR GUI '''STATS → Search''' screen (field label '''Enter Number to get Rate''') and legacy MOR API rate get when &amp;lt;code&amp;gt;by_full_dst=0&amp;lt;/code&amp;gt; is used on the legacy API.  Returns one or more rate rows for the authenticated user, or — for '''admin''', '''reseller''', and '''accountant''' callers — for another user named in &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt;. Simple portal users omit &amp;lt;code&amp;gt;username&amp;lt;/code...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Look up call rates for a destination prefix. Default behaviour matches the MOR GUI '''STATS → Search''' screen (field label '''Enter Number to get Rate''') and legacy [[MOR API rate get]] when &amp;lt;code&amp;gt;by_full_dst=0&amp;lt;/code&amp;gt; is used on the legacy API.&lt;br /&gt;
&lt;br /&gt;
Returns one or more rate rows for the authenticated user, or — for '''admin''', '''reseller''', and '''accountant''' callers — for another user named in &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt;. Simple portal users omit &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt;; the JWT identity is used.&lt;br /&gt;
&lt;br /&gt;
All endpoints require a valid Bearer token (see [[MOR API v2]] authentication), user type '''admin''', '''reseller''', '''accountant''', or '''user''', and &amp;lt;code&amp;gt;v2_rates_show&amp;lt;/code&amp;gt; (Read) on the user's [[MOR API Permission Groups|API permission group]] (section '''Rates''').&lt;br /&gt;
&lt;br /&gt;
Owner setting '''Allow devices to check rate over HTTP''' must be enabled in MOR or the API returns '''403''' with &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;Feature disabled&amp;quot; }&amp;lt;/code&amp;gt;. Simple users also need '''Show rates for users''' enabled or the API returns '''403''' with &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;User cannot view rates&amp;quot; }&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Quick start ==&lt;br /&gt;
&lt;br /&gt;
Obtain a token, then:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -s -H &amp;quot;Authorization: Bearer $TOKEN&amp;quot; \&lt;br /&gt;
  &amp;quot;https://your-mor.example/billing/api/v2/rates?prefix=9320&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legacy single-match mode (same algorithm as [[MOR API rate get]] when &amp;lt;code&amp;gt;by_full_dst&amp;lt;/code&amp;gt; is not set to full match):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -s -H &amp;quot;Authorization: Bearer $TOKEN&amp;quot; \&lt;br /&gt;
  &amp;quot;https://your-mor.example/billing/api/v2/rates?prefix=9320&amp;amp;amp;by_full_dst=0&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Endpoint ==&lt;br /&gt;
&lt;br /&gt;
Base path: &amp;lt;code&amp;gt;{Web_Dir}/api/v2/rates&amp;lt;/code&amp;gt; (for example &amp;lt;code&amp;gt;/billing/api/v2/rates&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Method !! Path !! Permission !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/rates&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;v2_rates_show&amp;lt;/code&amp;gt; || Rate lookup for a prefix.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Query parameters ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;prefix&amp;lt;/code&amp;gt; — required. Dialed number prefix; non-digit characters are ignored. Maximum 20 digits after stripping.&lt;br /&gt;
* &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt; — optional. Target MOR username for admin, reseller, or accountant lookups. Defaults to the JWT user when omitted (typical portal use).&lt;br /&gt;
* &amp;lt;code&amp;gt;by_full_dst&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. When omitted, defaults to &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; (full destination match with active rate rows, GUI search parity). When &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, legacy single-match algorithm (one row when found).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Example responses ==&lt;br /&gt;
&lt;br /&gt;
'''Success (200):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;rates&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;price&amp;quot;: &amp;quot;0.987&amp;quot;,&lt;br /&gt;
      &amp;quot;destination_name&amp;quot;: &amp;quot;Afghanistan Kabul&amp;quot;,&lt;br /&gt;
      &amp;quot;prefix&amp;quot;: &amp;quot;9320&amp;quot;,&lt;br /&gt;
      &amp;quot;active&amp;quot;: true&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;prefix&amp;quot;: &amp;quot;9320&amp;quot;,&lt;br /&gt;
    &amp;quot;by_full_dst&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;username&amp;quot;: &amp;quot;api_portal_user&amp;quot;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each &amp;lt;code&amp;gt;rates&amp;lt;/code&amp;gt; item includes &amp;lt;code&amp;gt;price&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;destination_name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;prefix&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;active&amp;lt;/code&amp;gt;. When &amp;lt;code&amp;gt;by_full_dst=1&amp;lt;/code&amp;gt;, only rows with &amp;lt;code&amp;gt;active: true&amp;lt;/code&amp;gt; are returned. The &amp;lt;code&amp;gt;meta&amp;lt;/code&amp;gt; object echoes the normalized prefix, effective &amp;lt;code&amp;gt;by_full_dst&amp;lt;/code&amp;gt; mode, and resolved &amp;lt;code&amp;gt;username&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Prices use raw database values in the system default currency, not per-user GUI formatting.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Errors ==&lt;br /&gt;
&lt;br /&gt;
* '''401''' — Missing or invalid token, unsupported lookup target, or API permission denied. Examples: &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;Unauthorized&amp;quot; }&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;API method not permitted: v2_rates_show&amp;quot; }&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;User was not found&amp;quot; }&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;You are not authorized to view this page&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''403''' — Rate checking disabled in MOR settings, or end users cannot view rates: &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;Feature disabled&amp;quot; }&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;User cannot view rates&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''404''' — No matching rate or prefix: &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;Rate was not found&amp;quot; }&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;Prefix was not found&amp;quot; }&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;Destination Group was not found&amp;quot; }&amp;lt;/code&amp;gt; (legacy single-match path)&lt;br /&gt;
* '''422''' — Empty or overlong prefix: &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;Empty prefix&amp;quot; }&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;Number cannot be longer than 20&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[MOR API rate get]] — legacy XML/hash rate lookup&lt;br /&gt;
* [[MOR API Permission Groups]] — enable &amp;lt;code&amp;gt;v2_rates_show&amp;lt;/code&amp;gt; for integrators&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_v2&amp;diff=31654</id>
		<title>MOR API v2</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_v2&amp;diff=31654"/>
		<updated>2026-06-03T18:16:32Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* APIs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=About=&lt;br /&gt;
MOR API lets other software interact with MOR without knowing the internal structure of the database (DB) and other logic.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=MOR users that are allowed to use the MOR API=&lt;br /&gt;
* Admin&lt;br /&gt;
* Reseller&lt;br /&gt;
* Accountant&lt;br /&gt;
* Simple User&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Client IP restriction (optional) =&lt;br /&gt;
&lt;br /&gt;
Administrators can limit API use by client IPv4 address: enable '''Restrict API access by IP''' under [[Configuration from GUI]] (together with '''Allow API globally'''), then mark which addresses may call the API on [[Whitelisted IPs]] ('''Allow API access''' per row). When the restriction is off, API behavior is unchanged. Details: configuration in [[Configuration from GUI]]; per-IP flags on [[Whitelisted IPs]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
Open the GUI using the MOR IP/domain http://IP_or_Domain/billing/api/v2/api-docs/.&lt;br /&gt;
&lt;br /&gt;
Press on '''Authorize''' and enter User credentials (Admin, Manager, Reseller, or User) into the '''basicAuth''' field and press '''Authorize'''.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_basicAuth.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_basicAuth_login.png]] &lt;br /&gt;
&lt;br /&gt;
Copy the token and use it for JWT authentication.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth_execute.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth_token.png]]&lt;br /&gt;
&lt;br /&gt;
Enter the token into the '''bearerAuthorization''' authorization field and press '''Authorize'''.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_bearerAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
You can now use the available APIs. Expand them to see the documentation.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=APIs=&lt;br /&gt;
&lt;br /&gt;
==Account==&lt;br /&gt;
* [[MOR_API_v2_me|me]] - Read and update the authenticated user's profile (GET/PATCH /me)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Active Calls==&lt;br /&gt;
* [[MOR_API_drop_active_calls|drop_active_calls]] - drop active calls.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Balance==&lt;br /&gt;
* [[MOR_API_v2_balance|balance]] - Show the authenticated user's prepaid balance (GET &amp;lt;code&amp;gt;/balance&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Calls==&lt;br /&gt;
* [[MOR_API_v2_Calls|retrieve_calls]] - retrieves the list of calls in the selected time period for the specified User/Device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==CDR Export==&lt;br /&gt;
* [[MOR_API_v2_cdr_export_templates|cdr_export_templates]] - List [[CDR Export Templates]] for the authenticated admin (read-only).&lt;br /&gt;
* [[MOR_API_v2_automatic_cdr_exports|automatic_cdr_exports]] - Manage scheduled automatic CDR export tasks: create, update, delete, and set active state (admin only).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DIDs ==&lt;br /&gt;
* [[MOR API v2 DIDs|dids]] — list DIDs visible to the authenticated admin or accountant (JSON).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Flash Calls==&lt;br /&gt;
* [[MOR API flash calls|flash_calls]] - initiate a Flash Call.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Rates==&lt;br /&gt;
* [[MOR API v2 rates|rates]] - Look up call rates for a dialed prefix (GET &amp;lt;code&amp;gt;/rates&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Ring Groups ==&lt;br /&gt;
* [[MOR API v2 ring_groups|ring_groups]] - List ring groups with member device extensions and caller IDs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Security==&lt;br /&gt;
&lt;br /&gt;
* [[MOR API v2 blocked_ips|blocked_ips]] - Manage [[MOR - Blocked IPs]].&lt;br /&gt;
* [[MOR API v2 whitelisted_ips|whitelisted_ips]] - Manage [[Whitelisted IPs]].&lt;br /&gt;
* [[MOR API IP access|ip_access]] - Read-only check whether an IPv4 address appears in MOR Monitorings block/whitelist lists.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Users ==&lt;br /&gt;
&lt;br /&gt;
* '''[[MOR API v2 user_assign_provider|user_assign_provider]]''' — Assign or unassign an unassigned [[Providers|provider]] to a simple [[Users|user]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==AI Transcriptions==&lt;br /&gt;
* [[MOR API Transcriptions AI|AI Transcriptions]] - recording voice-to-text.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_v2_balance&amp;diff=31653</id>
		<title>MOR API v2 balance</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_v2_balance&amp;diff=31653"/>
		<updated>2026-06-03T18:05:53Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;Returns the prepaid balance of the user identified by the Bearer JWT (self-service only). The response uses the same balance conversion rules as legacy MOR API user balance get for the authenticated user — not for looking up other users by username or device.  All endpoints require a valid Bearer token, user type '''admin''', '''reseller''', or '''user''', and &amp;lt;code&amp;gt;v2_balance_show&amp;lt;/code&amp;gt; (Read) on the user's API permission group (sect...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Returns the prepaid balance of the user identified by the Bearer JWT (self-service only). The response uses the same balance conversion rules as legacy [[MOR API user balance get]] for the authenticated user — not for looking up other users by username or device.&lt;br /&gt;
&lt;br /&gt;
All endpoints require a valid Bearer token, user type '''admin''', '''reseller''', or '''user''', and &amp;lt;code&amp;gt;v2_balance_show&amp;lt;/code&amp;gt; (Read) on the user's [[MOR API Permission Groups|API permission group]] (section '''Balance'''). Accountants cannot call this endpoint.&lt;br /&gt;
&lt;br /&gt;
Owner setting '''Balance via API''' must be enabled in MOR (same as legacy balance API) or the API returns '''403''' with &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;Feature disabled&amp;quot; }&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Quick start ==&lt;br /&gt;
&lt;br /&gt;
Obtain a token (see [[MOR API v2]] authentication), then:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Balance in system default currency&lt;br /&gt;
curl -s -H &amp;quot;Authorization: Bearer $TOKEN&amp;quot; \&lt;br /&gt;
  &amp;quot;https://your-mor.example/api/v2/balance&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Balance in the user's currency (includes currency field)&lt;br /&gt;
curl -s -H &amp;quot;Authorization: Bearer $TOKEN&amp;quot; \&lt;br /&gt;
  &amp;quot;https://your-mor.example/api/v2/balance?user_currency=1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Endpoint ==&lt;br /&gt;
&lt;br /&gt;
Base path: &amp;lt;code&amp;gt;{Web_Dir}/api/v2/balance&amp;lt;/code&amp;gt; (for example &amp;lt;code&amp;gt;/billing/api/v2/balance&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Method !! Path !! Permission !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/balance&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;v2_balance_show&amp;lt;/code&amp;gt; || Current user's balance.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Query parameters ==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;currency&amp;lt;/code&amp;gt; — optional currency code; use &amp;lt;code&amp;gt;USER&amp;lt;/code&amp;gt; for the user's currency; invalid or omitted values use the system default currency for conversion.&lt;br /&gt;
* &amp;lt;code&amp;gt;user_currency&amp;lt;/code&amp;gt; — &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;; when &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, convert to the user's currency and include a &amp;lt;code&amp;gt;currency&amp;lt;/code&amp;gt; field in the JSON response.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Example responses ==&lt;br /&gt;
&lt;br /&gt;
'''Success (200) — system currency:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;balance&amp;quot;: &amp;quot;10.0&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Success (200) — &amp;lt;code&amp;gt;user_currency=1&amp;lt;/code&amp;gt;:'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;balance&amp;quot;: &amp;quot;10.0&amp;quot;,&lt;br /&gt;
  &amp;quot;currency&amp;quot;: &amp;quot;USD&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;balance&amp;lt;/code&amp;gt; value is formatted with MOR's standard number formatting (same as the legacy balance API). Amounts use the system default currency in the database; conversion applies when &amp;lt;code&amp;gt;currency&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;user_currency&amp;lt;/code&amp;gt; requests another currency.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Errors ==&lt;br /&gt;
&lt;br /&gt;
* '''401''' — Missing or invalid token, unsupported user type (for example, accountant), or API permission denied: &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;Unauthorized&amp;quot; }&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;API method not permitted: v2_balance_show&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''403''' — Balance via API disabled in MOR settings: &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;Feature disabled&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[MOR API user balance get]] — legacy XML balance (hash authentication)&lt;br /&gt;
* [[MOR API v2 me]] — account profile including &amp;lt;code&amp;gt;balance_number&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;balance_currency&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_v2&amp;diff=31652</id>
		<title>MOR API v2</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_v2&amp;diff=31652"/>
		<updated>2026-06-03T18:01:40Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* APIs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=About=&lt;br /&gt;
MOR API lets other software interact with MOR without knowing the internal structure of the database (DB) and other logic.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=MOR users that are allowed to use the MOR API=&lt;br /&gt;
* Admin&lt;br /&gt;
* Reseller&lt;br /&gt;
* Accountant&lt;br /&gt;
* Simple User&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Client IP restriction (optional) =&lt;br /&gt;
&lt;br /&gt;
Administrators can limit API use by client IPv4 address: enable '''Restrict API access by IP''' under [[Configuration from GUI]] (together with '''Allow API globally'''), then mark which addresses may call the API on [[Whitelisted IPs]] ('''Allow API access''' per row). When the restriction is off, API behavior is unchanged. Details: configuration in [[Configuration from GUI]]; per-IP flags on [[Whitelisted IPs]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
Open the GUI using the MOR IP/domain http://IP_or_Domain/billing/api/v2/api-docs/.&lt;br /&gt;
&lt;br /&gt;
Press on '''Authorize''' and enter User credentials (Admin, Manager, Reseller, or User) into the '''basicAuth''' field and press '''Authorize'''.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_basicAuth.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_basicAuth_login.png]] &lt;br /&gt;
&lt;br /&gt;
Copy the token and use it for JWT authentication.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth_execute.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth_token.png]]&lt;br /&gt;
&lt;br /&gt;
Enter the token into the '''bearerAuthorization''' authorization field and press '''Authorize'''.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_bearerAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
You can now use the available APIs. Expand them to see the documentation.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=APIs=&lt;br /&gt;
&lt;br /&gt;
==Account==&lt;br /&gt;
* [[MOR_API_v2_me|me]] - Read and update the authenticated user's profile (GET/PATCH /me)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Active Calls==&lt;br /&gt;
* [[MOR_API_drop_active_calls|drop_active_calls]] - drop active calls.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Balance==&lt;br /&gt;
* [[MOR_API_v2_balance|balance]] - Show the authenticated user's prepaid balance (GET &amp;lt;code&amp;gt;/balance&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Calls==&lt;br /&gt;
* [[MOR_API_v2_Calls|retrieve_calls]] - retrieves the list of calls in the selected time period for the specified User/Device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==CDR Export==&lt;br /&gt;
* [[MOR_API_v2_cdr_export_templates|cdr_export_templates]] - List [[CDR Export Templates]] for the authenticated admin (read-only).&lt;br /&gt;
* [[MOR_API_v2_automatic_cdr_exports|automatic_cdr_exports]] - Manage scheduled automatic CDR export tasks: create, update, delete, and set active state (admin only).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DIDs ==&lt;br /&gt;
* [[MOR API v2 DIDs|dids]] — list DIDs visible to the authenticated admin or accountant (JSON).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Flash Calls==&lt;br /&gt;
* [[MOR API flash calls|flash_calls]] - initiate a Flash Call.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Ring Groups ==&lt;br /&gt;
* [[MOR API v2 ring_groups|ring_groups]] - List ring groups with member device extensions and caller IDs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Security==&lt;br /&gt;
&lt;br /&gt;
* [[MOR API v2 blocked_ips|blocked_ips]] - Manage [[MOR - Blocked IPs]].&lt;br /&gt;
* [[MOR API v2 whitelisted_ips|whitelisted_ips]] - Manage [[Whitelisted IPs]].&lt;br /&gt;
* [[MOR API IP access|ip_access]] - Read-only check whether an IPv4 address appears in MOR Monitorings block/whitelist lists.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Users ==&lt;br /&gt;
&lt;br /&gt;
* '''[[MOR API v2 user_assign_provider|user_assign_provider]]''' — Assign or unassign an unassigned [[Providers|provider]] to a simple [[Users|user]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==AI Transcriptions==&lt;br /&gt;
* [[MOR API Transcriptions AI|AI Transcriptions]] - recording voice-to-text.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_v2_me&amp;diff=31651</id>
		<title>MOR API v2 me</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_v2_me&amp;diff=31651"/>
		<updated>2026-06-03T17:39:02Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt; = Account profile (&amp;lt;code&amp;gt;/me&amp;lt;/code&amp;gt;) =  Returns or updates the profile of the user identified by the Bearer JWT (self-service only — not for editing other users).  &amp;lt;br&amp;gt;&amp;lt;br&amp;gt; ==== Authentication and permissions ====  * '''Bearer JWT''' (same as other MOR API v2 methods). * All user types may call when permitted. * Each call requires '''v2_me_show''' (GET) or '''v2_me_update''' (PATCH) on the user's API permission group.  &amp;lt;br&amp;gt;&amp;lt;br&amp;gt; = Endpoints =  Base path: &amp;lt;c...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Account profile (&amp;lt;code&amp;gt;/me&amp;lt;/code&amp;gt;) =&lt;br /&gt;
&lt;br /&gt;
Returns or updates the profile of the user identified by the Bearer JWT (self-service only — not for editing other users).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== Authentication and permissions ====&lt;br /&gt;
&lt;br /&gt;
* '''Bearer JWT''' (same as other [[MOR API v2]] methods).&lt;br /&gt;
* All user types may call when permitted.&lt;br /&gt;
* Each call requires '''v2_me_show''' (GET) or '''v2_me_update''' (PATCH) on the user's API permission group.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Endpoints =&lt;br /&gt;
&lt;br /&gt;
Base path: &amp;lt;code&amp;gt;{Web_Dir}/api/v2/me&amp;lt;/code&amp;gt; (for example &amp;lt;code&amp;gt;/billing/api/v2/me&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Method !! Path !! ACL name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/me&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;v2_me_show&amp;lt;/code&amp;gt; || Current user's profile (same fields as legacy [[MOR API user details get]] for the authenticated user).&lt;br /&gt;
|-&lt;br /&gt;
| PATCH || &amp;lt;code&amp;gt;/me&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;v2_me_update&amp;lt;/code&amp;gt; || Update personal details (GUI '''Personal details''' parity; simple users allowed when settings permit).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= GET response (200) =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;me&amp;quot;: {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 123,&lt;br /&gt;
    &amp;quot;username&amp;quot;: &amp;quot;user1&amp;quot;,&lt;br /&gt;
    &amp;quot;usertype&amp;quot;: &amp;quot;user&amp;quot;,&lt;br /&gt;
    &amp;quot;first_name&amp;quot;: &amp;quot;Jane&amp;quot;,&lt;br /&gt;
    &amp;quot;last_name&amp;quot;: &amp;quot;Doe&amp;quot;,&lt;br /&gt;
    &amp;quot;balance_number&amp;quot;: &amp;quot;10.0&amp;quot;,&lt;br /&gt;
    &amp;quot;balance_currency&amp;quot;: &amp;quot;USD&amp;quot;,&lt;br /&gt;
    &amp;quot;details_editing_allowed&amp;quot;: true,&lt;br /&gt;
    &amp;quot;email_editing_allowed&amp;quot;: true,&lt;br /&gt;
    &amp;quot;address&amp;quot;: { &amp;quot;email&amp;quot;: &amp;quot;jane@example.com&amp;quot;, &amp;quot;city&amp;quot;: &amp;quot;...&amp;quot; },&lt;br /&gt;
    &amp;quot;invoices&amp;quot;: { ... },&lt;br /&gt;
    &amp;quot;warning_balance&amp;quot;: { ... }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Role-specific fields (tariff, PBX pool, accountant ID, etc.) appear only when the viewer's role allows (same rules as [[MOR API user details get]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= PATCH body =&lt;br /&gt;
&lt;br /&gt;
Send '''application/json''' or form fields. Updatable fields match the GUI personal details:&lt;br /&gt;
&lt;br /&gt;
* Names and company: &amp;lt;code&amp;gt;first_name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;last_name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;company_name&amp;lt;/code&amp;gt;&lt;br /&gt;
* Address: nested &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt; object or flat &amp;lt;code&amp;gt;address&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;city&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;postcode&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;email&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
* &amp;lt;code&amp;gt;password&amp;lt;/code&amp;gt; — must meet system password rules&lt;br /&gt;
* Invoice delivery flags: &amp;lt;code&amp;gt;simplified_pdf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;simplified_csv&amp;lt;/code&amp;gt;, and related invoice type toggles&lt;br /&gt;
* Warning balance: &amp;lt;code&amp;gt;warning_email_active&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;warning_balance_email&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Success: '''200''' with updated &amp;lt;code&amp;gt;me&amp;lt;/code&amp;gt; object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Errors =&lt;br /&gt;
&lt;br /&gt;
* '''403''' — Owner setting '''Disallow Details Editing''' blocks simple users: &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;Details editing is disabled&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
* '''422''' — Validation (password, address, email when email editing disabled, empty body, etc.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[MOR API user details get]] — legacy XML read (hash-based)&lt;br /&gt;
* [[MOR API v2#Authentication|Authentication]] — obtain Bearer token&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_v2&amp;diff=31650</id>
		<title>MOR API v2</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_v2&amp;diff=31650"/>
		<updated>2026-06-03T17:36:23Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* APIs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=About=&lt;br /&gt;
MOR API lets other software interact with MOR without knowing the internal structure of the database (DB) and other logic.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=MOR users that are allowed to use the MOR API=&lt;br /&gt;
* Admin&lt;br /&gt;
* Reseller&lt;br /&gt;
* Accountant&lt;br /&gt;
* Simple User&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Client IP restriction (optional) =&lt;br /&gt;
&lt;br /&gt;
Administrators can limit API use by client IPv4 address: enable '''Restrict API access by IP''' under [[Configuration from GUI]] (together with '''Allow API globally'''), then mark which addresses may call the API on [[Whitelisted IPs]] ('''Allow API access''' per row). When the restriction is off, API behavior is unchanged. Details: configuration in [[Configuration from GUI]]; per-IP flags on [[Whitelisted IPs]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
Open the GUI using the MOR IP/domain http://IP_or_Domain/billing/api/v2/api-docs/.&lt;br /&gt;
&lt;br /&gt;
Press on '''Authorize''' and enter User credentials (Admin, Manager, Reseller, or User) into the '''basicAuth''' field and press '''Authorize'''.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_basicAuth.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_basicAuth_login.png]] &lt;br /&gt;
&lt;br /&gt;
Copy the token and use it for JWT authentication.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth_execute.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth_token.png]]&lt;br /&gt;
&lt;br /&gt;
Enter the token into the '''bearerAuthorization''' authorization field and press '''Authorize'''.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_bearerAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
You can now use the available APIs. Expand them to see the documentation.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=APIs=&lt;br /&gt;
&lt;br /&gt;
==Account==&lt;br /&gt;
* [[MOR_API_v2_me|me]] - Read and update the authenticated user's profile (GET/PATCH /me)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Active Calls==&lt;br /&gt;
* [[MOR_API_drop_active_calls|drop_active_calls]] - drop active calls.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calls==&lt;br /&gt;
* [[MOR_API_v2_Calls|retrieve_calls]] - retrieves the list of calls in the selected time period for the specified User/Device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==CDR Export==&lt;br /&gt;
* [[MOR_API_v2_cdr_export_templates|cdr_export_templates]] - List [[CDR Export Templates]] for the authenticated admin (read-only).&lt;br /&gt;
* [[MOR_API_v2_automatic_cdr_exports|automatic_cdr_exports]] - Manage scheduled automatic CDR export tasks: create, update, delete, and set active state (admin only).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DIDs ==&lt;br /&gt;
* [[MOR API v2 DIDs|dids]] — list DIDs visible to the authenticated admin or accountant (JSON).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Flash Calls==&lt;br /&gt;
* [[MOR API flash calls|flash_calls]] - initiate a Flash Call.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Ring Groups ==&lt;br /&gt;
* [[MOR API v2 ring_groups|ring_groups]] - List ring groups with member device extensions and caller IDs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Security==&lt;br /&gt;
&lt;br /&gt;
* [[MOR API v2 blocked_ips|blocked_ips]] - Manage [[MOR - Blocked IPs]].&lt;br /&gt;
* [[MOR API v2 whitelisted_ips|whitelisted_ips]] - Manage [[Whitelisted IPs]].&lt;br /&gt;
* [[MOR API IP access|ip_access]] - Read-only check whether an IPv4 address appears in MOR Monitorings block/whitelist lists.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Users ==&lt;br /&gt;
&lt;br /&gt;
* '''[[MOR API v2 user_assign_provider|user_assign_provider]]''' — Assign or unassign an unassigned [[Providers|provider]] to a simple [[Users|user]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==AI Transcriptions==&lt;br /&gt;
* [[MOR API Transcriptions AI|AI Transcriptions]] - recording voice-to-text.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_device_update&amp;diff=31648</id>
		<title>MOR API device update</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_device_update&amp;diff=31648"/>
		<updated>2026-06-03T07:37:34Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Description=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!---This functionality is available from MOR X4---&amp;gt;&lt;br /&gt;
[[MOR API]] update existing Device from params. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
* Call: /api/device_update&lt;br /&gt;
* Methods: POST, GET(if allowed, not recomended)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
===Parameters===&lt;br /&gt;
&lt;br /&gt;
Parameters which are '''included''' into hash:&lt;br /&gt;
&lt;br /&gt;
* '''device''' - device_id. '''Required'''.&lt;br /&gt;
* '''authentication''' - 0 stands for &amp;quot;Dynamic (Username/Password)&amp;quot; Device Authentication, 1 stands for &amp;quot;IP Authentication:&amp;quot;&lt;br /&gt;
* '''username''' - sets value for Username if device Authentication value is Dynamic. &amp;lt;!--su #12727 ticketu apdaryta kad sitas apram veiktu ir su username ir su device_name parametrais---&amp;gt;&lt;br /&gt;
* '''host''' - sets value for IP Address if device Authentication value is IP Authentication&lt;br /&gt;
* '''port''' - sets value for Port if device Authentication value is IP Authentication&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note that parameters are shown in the same order as they have to be when generating the hash. Last parameter in a row is API_Secret_Key'''&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Parameters which are '''not included''' into hash:&lt;br /&gt;
* '''[[MOR API hash construction | hash]]''' - SHA1 hash constructed using '''parameters''' which are listed above. Note that parameters are shown in the same order as they have to be when generating the hash. Last parameter in a row is '''API_Secret_Key''' ([[MOR API hash construction | More described in Constructing hash]]). '''Required'''.&amp;lt;br&amp;gt;&lt;br /&gt;
* '''u''' - username for authentication. '''Required'''.&lt;br /&gt;
* '''new_location_id''' - location_id.&lt;br /&gt;
&amp;lt;!--FROM MOR X5---&amp;gt;&lt;br /&gt;
* '''callerid_number''' - number.&lt;br /&gt;
* '''callerid_name''' - name.&lt;br /&gt;
&amp;lt;!--FROM MOR X6---&amp;gt;&lt;br /&gt;
* '''trunk''' - 0 stand for &amp;quot;No&amp;quot;, 1 stand for &amp;quot;Yes&amp;quot;, 2 stands for &amp;quot;Yes with ANI&amp;quot;.&lt;br /&gt;
* '''fax_email_add''' - email address to add.&lt;br /&gt;
* '''fax_email_delete''' - email address to delete.&lt;br /&gt;
* '''call_limit''' - call limit. Set 0 if you want unlimited sim. calls.&lt;br /&gt;
* '''inbound_call_limit''' - call limit. Set 0 if you want unlimited inbound calls.&lt;br /&gt;
* '''fromuser''' - sets value for Fromuser.&lt;br /&gt;
* '''password''' - sets value for Password if device Authentication value is Dynamic.&lt;br /&gt;
* '''call_timeout''' - max call duration (in seconds).&lt;br /&gt;
* '''extension''' - device extension. Allowed symbols: a-z0-9#*.&lt;br /&gt;
* '''pin''' - device PIN. Allowed symbols: 0-9 or empty parameter.&lt;br /&gt;
* '''hidden''' - for hiding and unhiding Devices. Allowed values: 0 - unhide, 1 - hide.&lt;br /&gt;
* '''language''' - sets value for language. &lt;br /&gt;
&amp;lt;!--FROM MOR X12---&amp;gt;&lt;br /&gt;
* '''allow_empty_callerid''' - if set to 1, allows to set empty callerid_number and/or callerid_name. &lt;br /&gt;
* '''comment''' - device comment to add or update.&lt;br /&gt;
&amp;lt;!--FROM MOR X13---&amp;gt;&lt;br /&gt;
* '''encryption''' - enable or disable encryption. Allowed values: 1 - yes, 0 - no.&lt;br /&gt;
* '''transport''' - allowed values: &amp;quot;'''udp'''&amp;quot;, &amp;quot;'''tcp'''&amp;quot;, &amp;quot;'''udp,tcp'''&amp;quot;, &amp;quot;'''tcp,udp'''&amp;quot;, &amp;quot;'''tls'''&amp;quot;.&lt;br /&gt;
&amp;lt;!--FROM MOR X14--&amp;gt;&lt;br /&gt;
* '''hostname''' - set device hostname, will take effect only if authentication = 1 (IP authenticated device).&lt;br /&gt;
* '''device_balance_enabled''' - enable or disable device balance. Allowed values: 1 - enable, 0 - disable.&lt;br /&gt;
* '''balance''' - set device balance. Only numeric values.&lt;br /&gt;
&amp;lt;!--FROM MOR X16--&amp;gt;&lt;br /&gt;
* '''ringing_timeout''' - max ringing duration in seconds (minimum value is 10).&lt;br /&gt;
* '''callerid_control_by_dids''' - 1 - enable, 0 - disable. Only available when the device has DIDs and the CallerID Number field is empty.&lt;br /&gt;
* '''callerid_random_number_from_dids''' - 1 - enable, 0 - disable. Use a random DID assigned to this device for CallerID.&lt;br /&gt;
'''Note''' that there is a parameter '''callerid_control_by_dids''', so if you want to enable one of them, send the parameter only for one of them. You do not need to send one request to disable and another to enable.&lt;br /&gt;
* '''voicemail_email''' - VoiceMail email address. To read back email, password, timezone, and delete-after-send in one call, use [[MOR API device details get]] — response tags &amp;lt;code&amp;gt;voicemail_email&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;voicemail_password&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;voicemail_tz&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;voicemail_delete&amp;lt;/code&amp;gt; (password, timezone, and delete are GUI-only on update).&lt;br /&gt;
* '''description''' - updates device description field.&lt;br /&gt;
* '''progressinband''' - allowed values: &amp;quot;'''No'''&amp;quot;, &amp;quot;'''Yes'''&amp;quot;, &amp;quot;'''Never'''&amp;quot;.&lt;br /&gt;
&amp;lt;!--FROM MOR X17 --&amp;gt;&lt;br /&gt;
* '''emergency_callerid''' - number for Emergency callerID.&lt;br /&gt;
* '''emergency_callerid_pool_id''' - Id of Emergency CallerID Number Pool&lt;br /&gt;
* '''sendrpid''' - yes, no (SIP)&lt;br /&gt;
* '''t38_support''' - no, yes, fec, redundancy and none (SIP and FAX, same as GUI)&lt;br /&gt;
* '''сopy_legA_name_to_LegB_number''' - 0,1 (SIP)&lt;br /&gt;
&amp;lt;!--FROM MOR X18 --&amp;gt;&lt;br /&gt;
* '''total_call_limit''' - one concurrent Call Limit (Outbound + Inbound). If the request uses call_limit and inbound_call_limit together with total_call_limit, then total_call_limit will be used.&lt;br /&gt;
* '''valid_cid_number_pool_id''' - Number Pool with valid CallerIDs.&lt;br /&gt;
* '''fake_number_pool_id''' - Random Number from Number Pool.&lt;br /&gt;
'''Note''': It should be taken into account that '''Use random Number when CallerID is invalid''' is not stored in the database. The option is '''on''' when both '''number_pools''' ('''valid_cid_number_pool_id''' and '''fake_number_pool_id''') are set. If they are not set, both '''number_pool''' parameters must be specified the first time to save the values. Other times, the parameters can be specified separately.&lt;br /&gt;
To disable the option '''Use random Number when CallerID is invalid''' it is required to send '''-1''' with parameters '''valid_cid_number_pool_id''' or '''fake_number_pool_id'''.&amp;lt;br&amp;gt;&lt;br /&gt;
Example: '''valid_cid_number_pool_id=-1'''.&lt;br /&gt;
* '''trunk_3cx''' - Enable 3CX option. This setting is meaningful only if the '''trunk''' parameter is set to 1 or 2.&lt;br /&gt;
* '''nat''' - available options &amp;quot;'''no'''&amp;quot;, &amp;quot;'''force_rport,comedia'''&amp;quot; (which is &amp;quot;'''yes'''&amp;quot; in GUI), &amp;quot;'''force_rport'''&amp;quot;, &amp;quot;'''comedia'''&amp;quot;.&lt;br /&gt;
* '''qualify''' - 1 - enable, 0 - disable. Works only for SIP/PJSIP devices.&lt;br /&gt;
* '''qualify_timeout''' - value &amp;gt;= 500 in ms.&lt;br /&gt;
* '''qualify_frequency''' - value &amp;gt;= 10 in seconds. Works only for PJSIP devices.&lt;br /&gt;
* '''media_use_received_transport''' - Optional. Allowed values: &amp;lt;code&amp;gt;yes&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;no&amp;lt;/code&amp;gt;. Works only when the device uses SIP with the PJSIP driver (&amp;lt;code&amp;gt;chan_pjsip&amp;lt;/code&amp;gt;). When &amp;lt;code&amp;gt;yes&amp;lt;/code&amp;gt;, Asterisk sets &amp;lt;code&amp;gt;media_use_received_transport&amp;lt;/code&amp;gt; on the endpoint so the media transport from the received SDP offer is echoed in the answer (useful for DTLS-SRTP / [[WebRTC|WebRTC]] and some NAT scenarios). Invalid values are ignored; the column is unchanged. Not available on device_create — new devices inherit the Default Device template and TLS auto-default rules instead. Response field on [[MOR API device details get|device_details_get]]: &amp;lt;code&amp;gt;pjsip_endpoint_media_use_received_transport&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''custom_sip_header''' - Custom SIP header for SIP devices. Format is &amp;lt;code&amp;gt;header: value&amp;lt;/code&amp;gt; (example: &amp;lt;code&amp;gt;x-My-Custom-Header: my value&amp;lt;/code&amp;gt;). An empty parameter clears the stored value. Maximum 255 characters. Read back with [[MOR API device details get]] tag &amp;lt;code&amp;gt;custom_sip_header&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Additional feature''' &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If the API setting '''Allow Resellers to use Admin Localization Rules''' is enabled:&amp;lt;br&amp;gt;Reseller is able to set a location inherited from Admin. '''new_location_id''' should be used as a parameter for location.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Request===&lt;br /&gt;
&lt;br /&gt;
 HTML POST: http://&amp;lt;SERVER_IP&amp;gt;/billing/api/device_update?u=admin&amp;amp;device=2&amp;amp;new_location_id=7&amp;amp;hash=297dab8c386794b2e947d52affb8f576c643569e&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Returns===&lt;br /&gt;
&lt;br /&gt;
'''Success'''&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;page&amp;gt;&lt;br /&gt;
   &amp;lt;status&amp;gt;&lt;br /&gt;
     &amp;lt;success&amp;gt;Device successfully updated&amp;lt;/success&amp;gt;&lt;br /&gt;
   &amp;lt;/status&amp;gt;&lt;br /&gt;
 &amp;lt;/page&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
'''Errors'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;error&amp;gt;Incorrect hash&amp;lt;/error&amp;gt; - Hash was not correct. Check API_Secret_Key and order or params while concatenating hash_string.&lt;br /&gt;
* &amp;lt;error&amp;gt;Access Denied&amp;lt;/error&amp;gt; - access not allowed&lt;br /&gt;
* &amp;lt;error&amp;gt;Device was not found&amp;lt;/error&amp;gt; - Device id incorrect or does not exist&lt;br /&gt;
* &amp;lt;error&amp;gt;Location was not found&amp;lt;/error&amp;gt; - Location id incorrect or does not exist&lt;br /&gt;
* &amp;lt;error&amp;gt;Password is too short&amp;lt;/error&amp;gt; - Password of device is too short&lt;br /&gt;
* &amp;lt;error&amp;gt;CallerID Control By DIDs was not updated because the device has callerID number&amp;lt;/error&amp;gt;&lt;br /&gt;
* &amp;lt;error&amp;gt;CallerID Control By DIDs was not updated because the device is not assigned to any DID&amp;lt;/error&amp;gt;&lt;br /&gt;
* &amp;lt;error&amp;gt;Wrong format of VoiceMail Email address&amp;lt;/error&amp;gt; &lt;br /&gt;
* &amp;lt;error&amp;gt;Emergency CallerID was not updated. Number Pool was not found&amp;lt;/error&amp;gt;&lt;br /&gt;
* &amp;lt;error&amp;gt;Emergency CallerID Number Pool was not updated. Emergency CallerID must be present&amp;lt;/error&amp;gt;&lt;br /&gt;
* &amp;lt;error&amp;gt;Emergency CallerID Number Pool was not updated. Number Pool was not found&amp;lt;/error&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&lt;br /&gt;
Change Username/Password authenticated Device to IP authenticated Device:&lt;br /&gt;
 http://&amp;lt;SERVER_IP&amp;gt;/billing/api/device_update?u=admin&amp;amp;device=51&amp;amp;authentication=1&amp;amp;host=192.168.5.20&amp;amp;port=5060&amp;amp;hash=XXXX&lt;br /&gt;
&lt;br /&gt;
Set empty CallerID:&lt;br /&gt;
 http://&amp;lt;SERVER_IP&amp;gt;/billing/api/device_update?u=admin&amp;amp;device=2&amp;amp;allow_empty_callerid=1&amp;amp;callerid_number=&amp;amp;hash=XXXX&lt;br /&gt;
&lt;br /&gt;
=See also=&lt;br /&gt;
&lt;br /&gt;
* [[MOR API]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=Automatic_CDR_Export&amp;diff=31643</id>
		<title>Automatic CDR Export</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=Automatic_CDR_Export&amp;diff=31643"/>
		<updated>2026-06-03T06:26:37Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Automatic CDR Export allows you to create periodic tasks that run at a configured time with specific query parameters. Exported data will be archived and sent via Email to the user or a specific Email address.&lt;br /&gt;
&lt;br /&gt;
==CDR Export Templates==&lt;br /&gt;
&lt;br /&gt;
Automatic CDR Export requires to create at least one [[CDR_Export_Templates|CDR Export Template]] so be sure to create one before proceeding.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Automatic CDR Export==&lt;br /&gt;
&lt;br /&gt;
Automatic CDR export is configured in '''SETTINGS''' -&amp;gt; '''Billing''' -&amp;gt; '''CDR''' -&amp;gt; '''Export''' -&amp;gt; '''Automatic''':&lt;br /&gt;
&lt;br /&gt;
[[File:Automatic cdr export menu.png]]&lt;br /&gt;
&lt;br /&gt;
Here you will find a list of already configured Automatic CDR Exports:&lt;br /&gt;
&lt;br /&gt;
[[File:Mor automatic cdr export list.png]]&lt;br /&gt;
&lt;br /&gt;
In this list, you may active/deactive CDR export tasks, edit or delete existing tasks, and create new ones by pressing '''Add new Automatic CDR Export'''.&lt;br /&gt;
&lt;br /&gt;
Note that '''Last run at''' and '''Next run at''' are shown in the timezone defined by the '''Time Zone''' setting.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==New Automatic CDR Export==&lt;br /&gt;
&lt;br /&gt;
[[File:Automatic cdr export create.png]]&lt;br /&gt;
&lt;br /&gt;
When creating a new Automatic CDR Export, you will see two sections: '''Query''' and '''Settings'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===Query section===&lt;br /&gt;
&lt;br /&gt;
This section is very similar to the filters on the Last Calls page. You can set various filters for the CDR Export query. These filters work in the same way as they work in the Last Call page; therefore, you may test your query in the Last Calls page, and if you are happy with the result, set the same parameters in this Query section.&lt;br /&gt;
&lt;br /&gt;
Note that date filters (From and Till) are missing. These filters depend on the CDR Export '''Repeat period''' and are described below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
===Settings section===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
====Name====&lt;br /&gt;
&lt;br /&gt;
The name is only for information purposes. This name is shown in the Automatic CDR Export list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
====Time Zone====&lt;br /&gt;
&lt;br /&gt;
Time Zone is an important setting and should be set correctly depending on the situation. All other time-related settings will use this Time Zone.&lt;br /&gt;
&lt;br /&gt;
For example, if you want to generate a daily CDR Export to your User who lives in a specific region, let’s say London, you should set the timezone to '''GMT (+00:00) London'''. This way, the user will get CDR data starting from 00:00:00 till 23:59:59 in the user’s timezone.&lt;br /&gt;
&lt;br /&gt;
Server and User may be in different time zones; therefore, it is important to set the Time Zone to the User’s timezone if you intend to generate CDR for this User.&lt;br /&gt;
&lt;br /&gt;
Another thing to consider is when you set '''Start CDR Export at''' setting (will be described later). This variable will also depend on the Time Zone setting. For example, maybe your server off-peer hours are 00:00:00 - 06:00:00, but in a selected time zone, off-peer hours may be different.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
====Repeat period====&lt;br /&gt;
&lt;br /&gt;
The repeat period defines how often CDR Export is executed and which period is used to retrieve data. For this reason, the Query section is missing the From and Till fields.&lt;br /&gt;
&lt;br /&gt;
Note that this setting depends on the Time Zone variable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=====Hourly=====&lt;br /&gt;
&lt;br /&gt;
CDR export will be executed each hour. CDR data will correspond to the whole '''previous''' hour. &lt;br /&gt;
&lt;br /&gt;
For example, if a CDR export was executed on 2016-11-11 10:00:00, the CDR will cover the period 2016-11-11 09:00:00 - 2016-11-11 09:59:59. &lt;br /&gt;
&lt;br /&gt;
In other words, it will work as if you set From to 2016-11-11 09:00:00 and Till to 2016-11-11 09:59:59 in date filters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=====Daily=====&lt;br /&gt;
&lt;br /&gt;
CDR export will be executed each day. CDR data will correspond to the whole '''previous''' day. &lt;br /&gt;
&lt;br /&gt;
For example, if a CDR export was executed on 2016-11-11 00:00:00, the CDR will cover the period from 2016-11-10 00:00:00 to 2016-11-10 23:59:59.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=====Weekly=====&lt;br /&gt;
&lt;br /&gt;
CDR export will be executed each week. CDR data will correspond to the whole '''previous''' week. &lt;br /&gt;
&lt;br /&gt;
For example, if a CDR export was executed on 2016-11-14 00:00:00 (Monday), the CDR will cover the period from 2016-11-07 00:00:00 (Monday) to 2016-11-13 23:59:59 (Sunday). The data period is always Monday - Sunday.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=====Bi-weekly=====&lt;br /&gt;
&lt;br /&gt;
CDR export will be executed each twice a month. CDR data will correspond to either the 1-15 days of the month or the 16-end of the month. &lt;br /&gt;
&lt;br /&gt;
For example, if a CDR export was executed on 2016-11-16 00:00:00, the CDR will cover the period from 2016-11-01 00:00:00 to 2016-11-15 23:59:59. If the CDR export was executed on 2016-12-01 00:00:00, then the CDR will be for the 2016-11-16 00:00:00 - 2016-11-30 23:59:59 period. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=====Monthly=====&lt;br /&gt;
&lt;br /&gt;
CDR export will be executed each month. CDR data will correspond to the whole '''previous''' month. &lt;br /&gt;
&lt;br /&gt;
For example, if a CDR export was executed on 2016-11-01 00:00:00, the CDR will cover the period from 2016-10-01 00:00:00 to 2016-10-31 23:59:59. The data period is always the first day of the month to the last day of the month (whole month).&lt;br /&gt;
&lt;br /&gt;
If you choose a specific day of the month, for example, 15, then CDR will be generated for 2016-10-15 00:00:00 - 2016-11-14 23:59:59 and will be sent at 2016-11-15 00:00:00&lt;br /&gt;
&lt;br /&gt;
*Example.&lt;br /&gt;
Today is the 15th of April.&lt;br /&gt;
If we choose the 14th or 15th day (Past or Today), then CDR will be generated only next month.&lt;br /&gt;
If we choose the 17th day (Future), then CDR will be generated for the previous month till 16th of April 23:59:59&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=====Only once=====&lt;br /&gt;
&lt;br /&gt;
CDR export will be executed on a specific date and time. Also, in the Query section, two additional filters will be displayed - From and Till. These filters allow you to specify a date period for the CDR Export query (in the selected time zone).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
====Start CDR Export at====&lt;br /&gt;
&lt;br /&gt;
If you have selected '''Daily''', '''Weekly''', '''Bi-weekly''' or '''Monthly''' periods, you may select specific hours when Automatic CDR export should be executed. This is useful because you may choose off-peak hours. Automatic CDR Export is executed only during a selected hour period.&lt;br /&gt;
&lt;br /&gt;
If you have selected the '''Only once''' period, you must set the full date (day and hour). This is because '''Only once''' is not periodic and should have a specific date and time.&lt;br /&gt;
&lt;br /&gt;
Things to consider:&lt;br /&gt;
&lt;br /&gt;
* Choose off-peak hours, this will reduce load on the system;&lt;br /&gt;
* Be careful when midnight is selected (00:00) because the user may start a new Call just before midnight, and that Call may last for more than an hour. In this case, you may want to start CDR export a few hours after midnight so all users’ calls have time to finish.&lt;br /&gt;
* Hourly period may be inaccurate for the reason described above.&lt;br /&gt;
&lt;br /&gt;
Note that this setting depends on the Time Zone variable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
====Template====&lt;br /&gt;
&lt;br /&gt;
Select which [[CDR_Export_Templates|CDR Export Template]] to use.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
====Filename Prefix====&lt;br /&gt;
&lt;br /&gt;
Select a prefix for how the file name will start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==== Archive extension====&lt;br /&gt;
&lt;br /&gt;
Select extension type to archive: tgz, zip, or gzip&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
====Send CDR to====&lt;br /&gt;
&lt;br /&gt;
Select who should receive CDR Export. It can be a user, a specific Email address, an FTP server, or an SFTP server. If User is selected, then the email address will be taken from the User's settings (make sure that the User has an email).&lt;br /&gt;
&lt;br /&gt;
Also, make sure that email sending is configured correctly.&lt;br /&gt;
&lt;br /&gt;
CDRs will be '''archived''' and sent to User/Email. &lt;br /&gt;
&lt;br /&gt;
If the archive is sent successfully, the user should receive a success email, which can be customized in [[Email_variables#CDR_Export|Emails]] settings. CDR archive will be attached.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' archive size is limited to '''10MB'''! If the CDR archive is larger, it will not be sent via Email; instead, the user will receive an error Email.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' if ''' Custom Email''' option is used and you want to send CDRs to more than one email, please separate the emails with ''';''' sign.&lt;br /&gt;
&lt;br /&gt;
'''FTP''' - Please fill FTP server details at [https://wiki.kolmisoft.com/index.php/Configuration_from_GUI#FTP FTP] tab.&lt;br /&gt;
&lt;br /&gt;
'''SFTP''' - Please fill SFTP server details at [https://wiki.kolmisoft.com/index.php/Configuration_from_GUI#SFTP SFTP] tab.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Next run at==&lt;br /&gt;
&lt;br /&gt;
In the Automatic CDR Export list, you should see the '''Next run at''' column. This shows the date and time (in the selected Timezone) when the CDR export will be executed. &lt;br /&gt;
&lt;br /&gt;
What happens when you create a new Automatic CDR Export? When will CDR Export be executed? It depends on the repeat period. New Automatic CDR Export is executed ''' on the next period'''. For example, if you have created an '''Hourly''' Automatic CDR Export on 2016-11-11 09:11:45, the first time the CDR Export is executed will be on 2016-11-11 10:00:00.&lt;br /&gt;
&lt;br /&gt;
If you have created a '''Daily''' Automatic CDR Export on 2016-11-11 09:11:45, the first time the CDR Export is executed will be on 2016-11-12 00:00:00.&lt;br /&gt;
&lt;br /&gt;
If you have created '''Monthly''' Automatic CDR Export on 2016-11-11 09:11:45, then the first time CDR Export is executed will be on 2016-12-01 00:00:00.&lt;br /&gt;
&lt;br /&gt;
Of course, the hours may differ depending on Start CDR Export, but the idea is that CDR Export is executed in the next period, whether that is the next hour, day, week, or month.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==File names==&lt;br /&gt;
&lt;br /&gt;
CDR Export output is a CSV file compressed in a tgz archive. Filename is based on dates, for example, if CDR Export was executed for the 2016-11-01 00:00:00 - 2016-11-30 23:59:59 period, then file names will be:&lt;br /&gt;
&lt;br /&gt;
'''CSV filename:''' MOR_CDR_export_20161122_000000_20161122_235959.csv&amp;lt;br&amp;gt;&lt;br /&gt;
'''TGZ filename:''' MOR_CDR_export_20161122_000000_20161122_235959.tgz&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==CDR Export and performance==&lt;br /&gt;
&lt;br /&gt;
CDR Export is a resource-intensive task. Consider having as few Automatic CDR Export tasks as possible. Also, shorter Repeat periods have better performance.&lt;br /&gt;
&lt;br /&gt;
It is advisable to set '''Start CDR Export at''' to off-peak hours. Also,''' Start CDR Export at''' allows to spread tasks across hours during the day.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==How old CDR Export tasks are handled==&lt;br /&gt;
&lt;br /&gt;
There might be situations where the script responsible for CDR Export functionality has not been running for a long time. What happens to all CDRs that were supposed to be generated during that time when the script was not running? Only a single CDR for the latest period will be generated. This is done intentionally to prevent a large number of CDR Export tasks from running simultaneously.&lt;br /&gt;
&lt;br /&gt;
For example, if the '''Monthly''' CDR Export tasks were created in January but the CDR Export script was not executed until November, then the CDR Export for January-September will be skipped. The script will generate the CDR Export for October and set '''Next run at''' to December.&lt;br /&gt;
&lt;br /&gt;
This logic does not apply to the'''Only once''' period. All tasks with the'''Only once''' period will be executed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= REST API =&lt;br /&gt;
&lt;br /&gt;
You can list, create, update, enable/disable, and delete automatic export tasks with [[MOR API v2]] (&amp;lt;code&amp;gt;/api/v2/automatic_cdr_exports&amp;lt;/code&amp;gt;). See [[MOR_API_v2_automatic_cdr_exports]] for permissions, request bodies, and scheduling notes. Templates are read-only at &amp;lt;code&amp;gt;/api/v2/cdr_export_templates&amp;lt;/code&amp;gt; — see [[MOR_API_v2_cdr_export_templates]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=See also=&lt;br /&gt;
&lt;br /&gt;
* [[CDR_Export_Templates|CDR Export Templates]]&amp;lt;br&amp;gt;&lt;br /&gt;
* [[Email_variables#CDR_Export|Emails Templates variables]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_v2_automatic_cdr_exports&amp;diff=31640</id>
		<title>MOR API v2 automatic cdr exports</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_v2_automatic_cdr_exports&amp;diff=31640"/>
		<updated>2026-06-03T06:12:21Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;Configure scheduled CDR delivery tasks through MOR API v2. Behavior matches '''SETTINGS → CDR → Export → Automatic''' in the GUI (see Automatic CDR Export for field meanings). Choose a &amp;lt;code&amp;gt;template_id&amp;lt;/code&amp;gt; from cdr_export_templates or the GUI.  The API '''creates and updates''' export tasks and returns scheduling metadata (for example, &amp;lt;code&amp;gt;next_run_at&amp;lt;/code&amp;gt;). It does '''not''' run an export immediately — the syst...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Configure scheduled CDR delivery tasks through [[MOR API v2]]. Behavior matches '''SETTINGS → CDR → Export → Automatic''' in the GUI (see [[Automatic CDR Export]] for field meanings). Choose a &amp;lt;code&amp;gt;template_id&amp;lt;/code&amp;gt; from [[MOR_API_v2_cdr_export_templates|cdr_export_templates]] or the GUI.&lt;br /&gt;
&lt;br /&gt;
The API '''creates and updates''' export tasks and returns scheduling metadata (for example, &amp;lt;code&amp;gt;next_run_at&amp;lt;/code&amp;gt;). It does '''not''' run an export immediately — the system scheduler delivers files when each task is due (same pipeline as the GUI).&lt;br /&gt;
&lt;br /&gt;
All endpoints require a valid Bearer token, '''admin''' user type, and the matching &amp;lt;code&amp;gt;v2_automatic_cdr_exports_*&amp;lt;/code&amp;gt; method on the user’s [[MOR API Permission Groups|API permission group]] (section '''CDR Export''').&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Quick start ====&lt;br /&gt;
&lt;br /&gt;
Obtain a token (see [[MOR API v2]] authentication), then:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Create a monthly automatic export for a wholesale user&lt;br /&gt;
curl -s -X POST -H &amp;quot;Authorization: Bearer $TOKEN&amp;quot; -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
  -d '{&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;Wholesale ACME monthly CDR&amp;quot;,&lt;br /&gt;
    &amp;quot;period&amp;quot;: &amp;quot;monthly&amp;quot;,&lt;br /&gt;
    &amp;quot;timezone&amp;quot;: &amp;quot;London&amp;quot;,&lt;br /&gt;
    &amp;quot;cdr_export_at_time&amp;quot;: &amp;quot;02:00:00&amp;quot;,&lt;br /&gt;
    &amp;quot;monthly_export_day&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;template_id&amp;quot;: 5,&lt;br /&gt;
    &amp;quot;send_cdr_to&amp;quot;: &amp;quot;user&amp;quot;,&lt;br /&gt;
    &amp;quot;send_to_user_id&amp;quot;: 123,&lt;br /&gt;
    &amp;quot;query&amp;quot;: { &amp;quot;s_user_id&amp;quot;: 123, &amp;quot;s_call_type&amp;quot;: &amp;quot;all&amp;quot; },&lt;br /&gt;
    &amp;quot;filename_prefix&amp;quot;: &amp;quot;ACME_&amp;quot;,&lt;br /&gt;
    &amp;quot;archive_extension&amp;quot;: &amp;quot;tgz&amp;quot;,&lt;br /&gt;
    &amp;quot;active&amp;quot;: true&lt;br /&gt;
  }' \&lt;br /&gt;
  &amp;quot;https://your-mor.example/api/v2/automatic_cdr_exports&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Read back the created task (use id from the POST response)&lt;br /&gt;
curl -s -H &amp;quot;Authorization: Bearer $TOKEN&amp;quot; \&lt;br /&gt;
  &amp;quot;https://your-mor.example/api/v2/automatic_cdr_exports/42&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Endpoints ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Method !! Path !! Permission !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/automatic_cdr_exports&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;v2_automatic_cdr_exports_index&amp;lt;/code&amp;gt; || List tasks. Query: &amp;lt;code&amp;gt;active&amp;lt;/code&amp;gt; (0/1), &amp;lt;code&amp;gt;send_to_user_id&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;period&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt; (partial match), &amp;lt;code&amp;gt;from&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;max_results&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/automatic_cdr_exports/{id}&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;v2_automatic_cdr_exports_show&amp;lt;/code&amp;gt; || Show one task.&lt;br /&gt;
|-&lt;br /&gt;
| POST || &amp;lt;code&amp;gt;/automatic_cdr_exports&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;v2_automatic_cdr_exports_create&amp;lt;/code&amp;gt; || Create a task. JSON body (flat or nested &amp;lt;code&amp;gt;query&amp;lt;/code&amp;gt; object). Returns &amp;lt;code&amp;gt;automatic_cdr_export&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;next_run_at&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| PUT / PATCH || &amp;lt;code&amp;gt;/automatic_cdr_exports/{id}&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;v2_automatic_cdr_exports_update&amp;lt;/code&amp;gt; || Update settings (partial fields allowed on PATCH).&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || &amp;lt;code&amp;gt;/automatic_cdr_exports/{id}&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;v2_automatic_cdr_exports_destroy&amp;lt;/code&amp;gt; || Delete a task (empty body on success).&lt;br /&gt;
|-&lt;br /&gt;
| PATCH || &amp;lt;code&amp;gt;/automatic_cdr_exports/{id}/active&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;v2_automatic_cdr_exports_update_active&amp;lt;/code&amp;gt; || Set active state explicitly: &amp;lt;code&amp;gt;{&amp;quot;active&amp;quot;: true}&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;{&amp;quot;active&amp;quot;: false}&amp;lt;/code&amp;gt; (not a toggle).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Request body ====&lt;br /&gt;
&lt;br /&gt;
'''Settings:''' &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;active&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;period&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;hourly&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;daily&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;weekly&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bi-weekly&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;monthly&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;only_once&amp;lt;/code&amp;gt;), &amp;lt;code&amp;gt;timezone&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cdr_export_at_time&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;HH:MM:SS&amp;lt;/code&amp;gt;), &amp;lt;code&amp;gt;monthly_export_day&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;template_id&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;filename_prefix&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;archive_extension&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;code&amp;gt;only_once&amp;lt;/code&amp;gt; also send &amp;lt;code&amp;gt;s_from&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;s_till&amp;lt;/code&amp;gt;, and &amp;lt;code&amp;gt;cdr_export_at_datetime&amp;lt;/code&amp;gt; (ISO 8601 datetimes).&lt;br /&gt;
&lt;br /&gt;
'''Delivery (&amp;lt;code&amp;gt;send_cdr_to&amp;lt;/code&amp;gt;):''' &amp;lt;code&amp;gt;user&amp;lt;/code&amp;gt; (requires &amp;lt;code&amp;gt;send_to_user_id&amp;lt;/code&amp;gt;), &amp;lt;code&amp;gt;email&amp;lt;/code&amp;gt; (requires &amp;lt;code&amp;gt;send_to_email&amp;lt;/code&amp;gt;), &amp;lt;code&amp;gt;ftp&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;sftp&amp;lt;/code&amp;gt;. FTP/SFTP delivery requires the corresponding server paths to be configured in MOR; the API accepts the task even when paths are missing — delivery may fail at runtime.&lt;br /&gt;
&lt;br /&gt;
'''Call filters (&amp;lt;code&amp;gt;query&amp;lt;/code&amp;gt; object):''' same fields as the GUI export query — for example &amp;lt;code&amp;gt;s_user_id&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;s_device&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;s_call_type&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;s_provider&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;s_destination&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;s_did_pattern&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;calls_from_users&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;calls_to_users&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;calls_via_dids&amp;lt;/code&amp;gt;, and related options.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Example responses ====&lt;br /&gt;
&lt;br /&gt;
'''Create (201):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;automatic_cdr_export&amp;quot;: {&lt;br /&gt;
    &amp;quot;id&amp;quot;: 42,&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;Wholesale ACME monthly CDR&amp;quot;,&lt;br /&gt;
    &amp;quot;active&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;period&amp;quot;: &amp;quot;monthly&amp;quot;,&lt;br /&gt;
    &amp;quot;timezone&amp;quot;: &amp;quot;London&amp;quot;,&lt;br /&gt;
    &amp;quot;template_id&amp;quot;: 5,&lt;br /&gt;
    &amp;quot;template_name&amp;quot;: &amp;quot;My template&amp;quot;,&lt;br /&gt;
    &amp;quot;send_cdr_to&amp;quot;: &amp;quot;user&amp;quot;,&lt;br /&gt;
    &amp;quot;send_to_user_id&amp;quot;: 123,&lt;br /&gt;
    &amp;quot;next_run_at&amp;quot;: &amp;quot;2026-07-01 02:00:00&amp;quot;,&lt;br /&gt;
    &amp;quot;last_run_at&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
    &amp;quot;cdr_export_at_time&amp;quot;: &amp;quot;02:00:00&amp;quot;,&lt;br /&gt;
    &amp;quot;monthly_export_day&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;query&amp;quot;: { &amp;quot;s_user_id&amp;quot;: 123, &amp;quot;s_call_type&amp;quot;: &amp;quot;all&amp;quot; }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Validation (422):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;error&amp;quot;: &amp;quot;Automatic CDR export was not created&amp;quot;,&lt;br /&gt;
  &amp;quot;details&amp;quot;: {&lt;br /&gt;
    &amp;quot;template_id&amp;quot;: [&amp;quot;Template must be selected&amp;quot;]&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Not found (404):''' &amp;lt;code&amp;gt;{ &amp;quot;error&amp;quot;: &amp;quot;Automatic CDR export was not found&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ACL denied (401):''' &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;API method not permitted: v2_automatic_cdr_exports_create&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Unauthorized role (401):''' &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;Unauthorized&amp;quot; }&amp;lt;/code&amp;gt; — accountant and user types cannot call these endpoints.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[Automatic CDR Export]] — GUI scheduling and delivery options&lt;br /&gt;
* [[MOR_API_v2_cdr_export_templates]] — read-only template list/show (&amp;lt;code&amp;gt;template_id&amp;lt;/code&amp;gt;)&lt;br /&gt;
* [[CDR Export Templates]] — GUI column templates&lt;br /&gt;
* [[MOR API Permission Groups]] — &amp;lt;code&amp;gt;v2_automatic_cdr_exports_*&amp;lt;/code&amp;gt; under '''CDR Export'''&lt;br /&gt;
* [[API Configuration]] — enable API and permission groups&lt;br /&gt;
* [[Authentication]] — obtain Bearer token for v2 calls&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_v2_cdr_export_templates&amp;diff=31639</id>
		<title>MOR API v2 cdr export templates</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_v2_cdr_export_templates&amp;diff=31639"/>
		<updated>2026-06-03T06:11:41Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;List and show CDR Export Templates through MOR API v2. Behavior matches '''SETTINGS → CDR → Export → Templates''' in the GUI (see CDR Export Templates for column meanings). Templates cannot be created or edited through this API — use the GUI for create/edit.  All endpoints require a valid Bearer token, '''admin''' user type, and &amp;lt;code&amp;gt;v2_cdr_export_templates_index&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;v2_cdr_export_templates_show&amp;lt;/code&amp;gt; on the user’s MOR API Permission...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List and show [[CDR Export Templates]] through [[MOR API v2]]. Behavior matches '''SETTINGS → CDR → Export → Templates''' in the GUI (see [[CDR Export Templates]] for column meanings). Templates cannot be created or edited through this API — use the GUI for create/edit.&lt;br /&gt;
&lt;br /&gt;
All endpoints require a valid Bearer token, '''admin''' user type, and &amp;lt;code&amp;gt;v2_cdr_export_templates_index&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;v2_cdr_export_templates_show&amp;lt;/code&amp;gt; on the user’s [[MOR API Permission Groups|API permission group]] (section '''CDR Export''').&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Quick start ====&lt;br /&gt;
&lt;br /&gt;
Obtain a token (see [[MOR API v2]] authentication), then:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# List CDR export templates (admin-owned templates with at least one column)&lt;br /&gt;
curl -s -H &amp;quot;Authorization: Bearer $TOKEN&amp;quot; \&lt;br /&gt;
  &amp;quot;https://your-mor.example/api/v2/cdr_export_templates&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Show one template&lt;br /&gt;
curl -s -H &amp;quot;Authorization: Bearer $TOKEN&amp;quot; \&lt;br /&gt;
  &amp;quot;https://your-mor.example/api/v2/cdr_export_templates/5&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Endpoints ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Method !! Path !! Permission !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/cdr_export_templates&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;v2_cdr_export_templates_index&amp;lt;/code&amp;gt; || List templates owned by the authenticated admin (non-empty column set only).&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/cdr_export_templates/{id}&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;v2_cdr_export_templates_show&amp;lt;/code&amp;gt; || Show one template (&amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;columns&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;column_count&amp;lt;/code&amp;gt;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Example responses ====&lt;br /&gt;
&lt;br /&gt;
'''List (200):''' array of template objects with &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;name&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;columns&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;column_count&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Not found (404):''' &amp;lt;code&amp;gt;{ &amp;quot;error&amp;quot;: &amp;quot;CDR export template was not found&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ACL denied (401):''' &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;API method not permitted: v2_cdr_export_templates_index&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Unauthorized role (401):''' &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;Unauthorized&amp;quot; }&amp;lt;/code&amp;gt; — accountant and user types cannot call these endpoints.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[CDR Export Templates]] — GUI create/edit and column layout&lt;br /&gt;
* [[MOR_API_v2_automatic_cdr_exports]] — scheduled export tasks (uses &amp;lt;code&amp;gt;template_id&amp;lt;/code&amp;gt;)&lt;br /&gt;
* [[MOR API Permission Groups]] — &amp;lt;code&amp;gt;v2_cdr_export_templates_*&amp;lt;/code&amp;gt; under '''CDR Export'''&lt;br /&gt;
* [[API Configuration]] — enable API and permission groups&lt;br /&gt;
* [[Authentication]] — obtain Bearer token for v2 calls&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_v2&amp;diff=31638</id>
		<title>MOR API v2</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_v2&amp;diff=31638"/>
		<updated>2026-06-03T06:02:58Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* APIs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=About=&lt;br /&gt;
MOR API lets other software interact with MOR without knowing the internal structure of the database (DB) and other logic.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=MOR users that are allowed to use the MOR API=&lt;br /&gt;
* Admin&lt;br /&gt;
* Reseller&lt;br /&gt;
* Accountant&lt;br /&gt;
* Simple User&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Client IP restriction (optional) =&lt;br /&gt;
&lt;br /&gt;
Administrators can limit API use by client IPv4 address: enable '''Restrict API access by IP''' under [[Configuration from GUI]] (together with '''Allow API globally'''), then mark which addresses may call the API on [[Whitelisted IPs]] ('''Allow API access''' per row). When the restriction is off, API behavior is unchanged. Details: configuration in [[Configuration from GUI]]; per-IP flags on [[Whitelisted IPs]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
Open the GUI using the MOR IP/domain http://IP_or_Domain/billing/api/v2/api-docs/.&lt;br /&gt;
&lt;br /&gt;
Press on '''Authorize''' and enter User credentials (Admin, Manager, Reseller, or User) into the '''basicAuth''' field and press '''Authorize'''.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_basicAuth.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_basicAuth_login.png]] &lt;br /&gt;
&lt;br /&gt;
Copy the token and use it for JWT authentication.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth_execute.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth_token.png]]&lt;br /&gt;
&lt;br /&gt;
Enter the token into the '''bearerAuthorization''' authorization field and press '''Authorize'''.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_bearerAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
You can now use the available APIs. Expand them to see the documentation.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=APIs=&lt;br /&gt;
&lt;br /&gt;
==Active Calls==&lt;br /&gt;
* [[MOR_API_drop_active_calls|drop_active_calls]] - drop active calls.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calls==&lt;br /&gt;
* [[MOR_API_v2_Calls|retrieve_calls]] - retrieves the list of calls in the selected time period for the specified User/Device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==CDR Export==&lt;br /&gt;
* [[MOR_API_v2_cdr_export_templates|cdr_export_templates]] - List [[CDR Export Templates]] for the authenticated admin (read-only).&lt;br /&gt;
* [[MOR_API_v2_automatic_cdr_exports|automatic_cdr_exports]] - Manage scheduled automatic CDR export tasks: create, update, delete, and set active state (admin only).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DIDs ==&lt;br /&gt;
* [[MOR API v2 DIDs|dids]] — list DIDs visible to the authenticated admin or accountant (JSON).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Flash Calls==&lt;br /&gt;
* [[MOR API flash calls|flash_calls]] - initiate a Flash Call.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Ring Groups ==&lt;br /&gt;
* [[MOR API v2 ring_groups|ring_groups]] - List ring groups with member device extensions and caller IDs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Security==&lt;br /&gt;
&lt;br /&gt;
* [[MOR API v2 blocked_ips|blocked_ips]] - Manage [[MOR - Blocked IPs]].&lt;br /&gt;
* [[MOR API v2 whitelisted_ips|whitelisted_ips]] - Manage [[Whitelisted IPs]].&lt;br /&gt;
* [[MOR API IP access|ip_access]] - Read-only check whether an IPv4 address appears in MOR Monitorings block/whitelist lists.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Users ==&lt;br /&gt;
&lt;br /&gt;
* '''[[MOR API v2 user_assign_provider|user_assign_provider]]''' — Assign or unassign an unassigned [[Providers|provider]] to a simple [[Users|user]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==AI Transcriptions==&lt;br /&gt;
* [[MOR API Transcriptions AI|AI Transcriptions]] - recording voice-to-text.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=Whitelisted_IPs&amp;diff=31637</id>
		<title>Whitelisted IPs</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=Whitelisted_IPs&amp;diff=31637"/>
		<updated>2026-06-03T05:34:05Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Whitelisted IPs''' can be used from '''Admin''' account and from '''Accountant''' account with Monitoring permissions enabled.&lt;br /&gt;
&lt;br /&gt;
From the Admin account, go to '''SETTINGS -&amp;gt; Security -&amp;gt; Whitelisted IPs''' to manage Whitelisted IPs.&lt;br /&gt;
&lt;br /&gt;
An IP can be whitelisted by entering valid input values and by clicking the '''Whitelist''' icon.&lt;br /&gt;
&lt;br /&gt;
'''The range of IPs''' can be added in a format like '''192.168.0.1-5''', which would result in multiple entries being created (192.168.0.1, 192.168.0.2, 192.168.0.3, 192.168.0.4 and 192.168.0.5).&lt;br /&gt;
&lt;br /&gt;
All the Whitelisted changes will be active in '''one minute after they have been applied.''' Country information (flag) can take up to one hour to appear.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:mor_whitelist_ips_list.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The Comment can be added to the Reason field. If the Reason is not specified, then it will be set to &amp;quot;MOR-WHITELIST-GUI&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
If the country to which the IP belongs is blocked in [[Blocked Countries]], but the IP is added to '''Whitelisted IPs''', it means that the whole country is blocked except for the whitelisted IP.&lt;br /&gt;
&lt;br /&gt;
'''Search''' functionality allows checking if the entered IP exists in the list.&lt;br /&gt;
&lt;br /&gt;
Wildcard '''%''' is available to use in the search.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= Whitelisted IP format =&lt;br /&gt;
It is possible to block IPs in such a format:&lt;br /&gt;
* Single IP, for example, '''2.2.2.2'''&lt;br /&gt;
* Subnet in CIDR notation, for example, '''2.2.2.0/24'''. Please note that CIDR notation will be converted into the canonical format automatically. For example, if you enter 2.2.2.1/24, it will be converted to 2.2.2.0/24. This is because 2.2.2.0/24 denotes the range 2.2.2.1 - 2.2.2.254, so any subnet from 2.2.2.1/24 to 2.2.2.254/24 means exactly the same range, and a canonical way to represent this is range is with 2.2.2.0/24&lt;br /&gt;
* IP range in format x.x.x.x-xx, for example '''2.2.2.1-125'''. Please note that all IPs in the range will be whitelisted as separate IPs, so entering 2.2.2.1-125 would create 125 single IP entries. For this reason, we strongly recommend using subnets if possible.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Allow API access =&lt;br /&gt;
&lt;br /&gt;
Each entry on the '''Whitelisted IPs''' page can be marked '''Allow API access'''. This flag does '''not''' change whether the server accepts network traffic from that IP (GUI whitelist and IP-authenticated device rules work as before). It only controls whether that IP may use the [[MOR API]] and [[MOR API v2]] when '''Restrict API access by IP''' is turned on under [[Configuration from GUI]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== GUI whitelist (upper table) ====&lt;br /&gt;
&lt;br /&gt;
The upper table lists IPs added through '''Whitelisted IPs''' (network whitelist managed from the GUI). For each row you can:&lt;br /&gt;
&lt;br /&gt;
* Set '''Allow API access''' when adding a new IP (checkbox in the add row).&lt;br /&gt;
* Toggle '''Allow API access''' on '''active''' rows (checkbox in the list). The checkbox is not available while a row is still being applied or removed (grey “in progress” state — same as '''Remove''').&lt;br /&gt;
* Single IPs and CIDR prefixes (for example, &amp;lt;code&amp;gt;198.51.100.0/24&amp;lt;/code&amp;gt;) are supported for API matching when the flag is enabled.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== IP authenticated Device or Provider (lower table) ====&lt;br /&gt;
&lt;br /&gt;
The lower table lists IPs taken from the'''IP authenticated Device or Provider''' configuration (devices or providers that authenticate by source IP). These are '''not''' the same as GUI whitelist rows, but you can grant them API access the same way:&lt;br /&gt;
&lt;br /&gt;
* Use the '''Allow API access''' column to allow or deny API calls from that IP when '''Restrict API access by IP''' is enabled.&lt;br /&gt;
* Checking or clearing the box affects '''API access only'''. It does '''not''' add or remove the device’s IP-authentication or SIP whitelist rules on the server.&lt;br /&gt;
&lt;br /&gt;
If the same IPv4 address appears in both tables, either entry with '''Allow API access''' enabled is sufficient for API calls when the restriction is in effect.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== When restriction is enabled ====&lt;br /&gt;
&lt;br /&gt;
With '''Restrict API access by IP''' enabled (see [[Configuration from GUI]]):&lt;br /&gt;
&lt;br /&gt;
* Legacy XML API and [[MOR API v2]] requests are accepted only from client IPv4 addresses that match a row with '''Allow API access''' enabled (exact IP or CIDR).&lt;br /&gt;
* Rows that are still being whitelisted in the GUI (pending state) are treated as allowed for API purposes for a short time so you are not locked out while the server applies the change.&lt;br /&gt;
* If restriction is on and '''no''' row has '''Allow API access''' enabled, API calls are denied until you flag at least one IP on this page or in API settings.&lt;br /&gt;
&lt;br /&gt;
The diagnostic endpoint '''GET /api/v2/ip_access/status''' (see [[MOR API v2]]) remains available to check an IP's block/whitelist status; it is not blocked by this restriction. Other API permissions (user ACL, Allow API globally, and so on) still apply.&lt;br /&gt;
&lt;br /&gt;
Denied API calls from disallowed client IPs may be logged in the [[Action log]] (first deny per client IP within a short interval). Further repeated denials from the same IP are limited to reduce log noise.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= REST API =&lt;br /&gt;
&lt;br /&gt;
You can list, create, update API access, and remove GUI whitelist rows with [[MOR API v2]] (&amp;lt;code&amp;gt;/api/v2/whitelisted_ips&amp;lt;/code&amp;gt;). See [[MOR API v2#Whitelisted IPs (REST)]] for permissions, request bodies, and caller IP auto-ensure when '''Allow API access''' is enabled.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[Blocked IPs]]&lt;br /&gt;
* [[How to block someone's IP]]&lt;br /&gt;
* [[How to block country IP]]&lt;br /&gt;
* [[How to add Fail2ban exception for my IP]]&lt;br /&gt;
* [[Monitorings Addon]]&lt;br /&gt;
* [[Configuration from GUI]] — '''Restrict API access by IP''' and '''Allow API globally'''&lt;br /&gt;
* [[MOR API]] — legacy XML API&lt;br /&gt;
* [[MOR API v2]] — REST API, including IP access status&lt;br /&gt;
* [[Monitorings Addon]] — block/whitelist monitoring features&lt;br /&gt;
* [[Blocked IPs]] — block list (separate from API allow flag)&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_v2_whitelisted_ips&amp;diff=31636</id>
		<title>MOR API v2 whitelisted ips</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_v2_whitelisted_ips&amp;diff=31636"/>
		<updated>2026-06-03T05:27:48Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;Manage GUI whitelist rows (not IP-authenticated device rows from &amp;lt;code&amp;gt;mor_ipauth_whitelist.txt&amp;lt;/code&amp;gt;) via MOR API v2. Behaviour matches '''Security → Monitorings → Whitelisted IPs''' in the GUI: the same validation rules apply (single IP, CIDR, or range; up to about 125 addresses per range). Changes take up to about one minute to apply on servers.  All endpoints require a valid Bearer token, accountant '''monitorings_manage''' (read for list, write for create/u...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Manage GUI whitelist rows (not IP-authenticated device rows from &amp;lt;code&amp;gt;mor_ipauth_whitelist.txt&amp;lt;/code&amp;gt;) via [[MOR API v2]]. Behaviour matches '''Security → Monitorings → Whitelisted IPs''' in the GUI: the same validation rules apply (single IP, CIDR, or range; up to about 125 addresses per range). Changes take up to about one minute to apply on servers.&lt;br /&gt;
&lt;br /&gt;
All endpoints require a valid Bearer token, accountant '''monitorings_manage''' (read for list, write for create/update/delete), and the matching &amp;lt;code&amp;gt;v2_whitelisted_ips_*&amp;lt;/code&amp;gt; API method permission.&lt;br /&gt;
&lt;br /&gt;
These endpoints '''do not''' enforce '''Restrict API access by IP''' on themselves (so you can configure allow rules while restriction is on). Other v2 routes still enforce client IP when restriction is enabled.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== Quick start ====&lt;br /&gt;
&lt;br /&gt;
# List active and pending whitelist rows&lt;br /&gt;
curl -s -H &amp;quot;Authorization: Bearer $TOKEN&amp;quot; \&lt;br /&gt;
  &amp;quot;https://your-mor.example/api/v2/whitelisted_ips?search_ip=203.0.113.&amp;amp;from=1&amp;amp;max_results=50&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Whitelist a subnet and allow API access (auto-adds caller IP if needed)&lt;br /&gt;
curl -s -X POST -H &amp;quot;Authorization: Bearer $TOKEN&amp;quot; -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
  -d '{&amp;quot;ip&amp;quot;:&amp;quot;198.51.100.0/24&amp;quot;,&amp;quot;server_id&amp;quot;:1,&amp;quot;api_access_allowed&amp;quot;:true}' \&lt;br /&gt;
  &amp;quot;https://your-mor.example/api/v2/whitelisted_ips&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== Endpoints ====&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Method !! Path !! Permission !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/whitelisted_ips&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;v2_whitelisted_ips_index&amp;lt;/code&amp;gt; || List rows. Query: &amp;lt;code&amp;gt;search_ip&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;search_reason&amp;lt;/code&amp;gt; (SQL &amp;lt;code&amp;gt;LIKE&amp;lt;/code&amp;gt;), &amp;lt;code&amp;gt;from&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;max_results&amp;lt;/code&amp;gt;. Response includes &amp;lt;code&amp;gt;meta.caller_ip&amp;lt;/code&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| POST || &amp;lt;code&amp;gt;/whitelisted_ips&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;v2_whitelisted_ips_create&amp;lt;/code&amp;gt; || Add whitelist row(s). Body: &amp;lt;code&amp;gt;ip&amp;lt;/code&amp;gt; (required), &amp;lt;code&amp;gt;server_id&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;&amp;quot;all&amp;quot;&amp;lt;/code&amp;gt;, optional &amp;lt;code&amp;gt;reason&amp;lt;/code&amp;gt; (default &amp;lt;code&amp;gt;MOR-WHITELIST-API&amp;lt;/code&amp;gt;), &amp;lt;code&amp;gt;api_access_allowed&amp;lt;/code&amp;gt; (default false). All IP×server pairs must validate or nothing is saved (422 + &amp;lt;code&amp;gt;failed[]&amp;lt;/code&amp;gt;). When &amp;lt;code&amp;gt;api_access_allowed&amp;lt;/code&amp;gt; is true, the server may auto-create a row for the API client IPv4 with reason &amp;lt;code&amp;gt;MOR-WHITELIST-API-AUTO&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;meta.caller_ip_ensured&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| PATCH || &amp;lt;code&amp;gt;/whitelisted_ips/{id}&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;v2_whitelisted_ips_update&amp;lt;/code&amp;gt; || Set &amp;lt;code&amp;gt;api_access_allowed&amp;lt;/code&amp;gt; on an '''active''' row (&amp;lt;code&amp;gt;unblock == 3&amp;lt;/code&amp;gt;). Auto-ensure on enable matches POST.&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || &amp;lt;code&amp;gt;/whitelisted_ips/{id}&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;v2_whitelisted_ips_destroy&amp;lt;/code&amp;gt; || Remove an active row (pending remove). Pending add/remove rows return 422.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== JSON fields (list item) ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;id&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ip&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;server_id&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;server_label&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;reason&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;api_access_allowed&amp;lt;/code&amp;gt; (boolean)&lt;br /&gt;
* &amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;active&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pending_add&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pending_remove&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== Client IP behind a proxy ====&lt;br /&gt;
&lt;br /&gt;
Auto-ensure and &amp;lt;code&amp;gt;meta.caller_ip&amp;lt;/code&amp;gt; use the Rails client IP (&amp;lt;code&amp;gt;request.remote_ip&amp;lt;/code&amp;gt;). If MOR sits behind a reverse proxy, ensure the proxy forwards the real client address (for example &amp;lt;code&amp;gt;X-Forwarded-For&amp;lt;/code&amp;gt;) so auto-ensure matches the integrator’s egress IP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[Whitelisted IPs]] — GUI and '''Allow API access'''&lt;br /&gt;
* [[Configuration from GUI]] — '''Restrict API access by IP'''&lt;br /&gt;
* [[MOR API v2]] — authentication and ACL&lt;br /&gt;
* [[Blocked IPs]] — block list (separate API)&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_v2&amp;diff=31635</id>
		<title>MOR API v2</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_v2&amp;diff=31635"/>
		<updated>2026-06-03T05:27:17Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Security */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=About=&lt;br /&gt;
MOR API lets other software interact with MOR without knowing the internal structure of the database (DB) and other logic.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=MOR users that are allowed to use the MOR API=&lt;br /&gt;
* Admin&lt;br /&gt;
* Reseller&lt;br /&gt;
* Accountant&lt;br /&gt;
* Simple User&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Client IP restriction (optional) =&lt;br /&gt;
&lt;br /&gt;
Administrators can limit API use by client IPv4 address: enable '''Restrict API access by IP''' under [[Configuration from GUI]] (together with '''Allow API globally'''), then mark which addresses may call the API on [[Whitelisted IPs]] ('''Allow API access''' per row). When the restriction is off, API behavior is unchanged. Details: configuration in [[Configuration from GUI]]; per-IP flags on [[Whitelisted IPs]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
Open the GUI using the MOR IP/domain http://IP_or_Domain/billing/api/v2/api-docs/.&lt;br /&gt;
&lt;br /&gt;
Press on '''Authorize''' and enter User credentials (Admin, Manager, Reseller, or User) into the '''basicAuth''' field and press '''Authorize'''.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_basicAuth.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_basicAuth_login.png]] &lt;br /&gt;
&lt;br /&gt;
Copy the token and use it for JWT authentication.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth_execute.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth_token.png]]&lt;br /&gt;
&lt;br /&gt;
Enter the token into the '''bearerAuthorization''' authorization field and press '''Authorize'''.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_bearerAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
You can now use the available APIs. Expand them to see the documentation.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=APIs=&lt;br /&gt;
&lt;br /&gt;
==Active Calls==&lt;br /&gt;
* [[MOR_API_drop_active_calls|drop_active_calls]] - drop active calls.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calls==&lt;br /&gt;
* [[MOR_API_v2_Calls|retrieve_calls]] - retrieves the list of calls in the selected time period for the specified User/Device.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DIDs ==&lt;br /&gt;
* [[MOR API v2 DIDs|dids]] — list DIDs visible to the authenticated admin or accountant (JSON).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Flash Calls==&lt;br /&gt;
* [[MOR API flash calls|flash_calls]] - initiate a Flash Call.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Ring Groups ==&lt;br /&gt;
* [[MOR API v2 ring_groups|ring_groups]] - List ring groups with member device extensions and caller IDs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Security==&lt;br /&gt;
&lt;br /&gt;
* [[MOR API v2 blocked_ips|blocked_ips]] - Manage [[MOR - Blocked IPs]].&lt;br /&gt;
* [[MOR API v2 whitelisted_ips|whitelisted_ips]] - Manage [[Whitelisted IPs]].&lt;br /&gt;
* [[MOR API IP access|ip_access]] - Read-only check whether an IPv4 address appears in MOR Monitorings block/whitelist lists.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Users ==&lt;br /&gt;
&lt;br /&gt;
* '''[[MOR API v2 user_assign_provider|user_assign_provider]]''' — Assign or unassign an unassigned [[Providers|provider]] to a simple [[Users|user]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==AI Transcriptions==&lt;br /&gt;
* [[MOR API Transcriptions AI|AI Transcriptions]] - recording voice-to-text.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_-_Blocked_IPs&amp;diff=31634</id>
		<title>MOR - Blocked IPs</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_-_Blocked_IPs&amp;diff=31634"/>
		<updated>2026-06-02T18:16:21Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page allows you to block IP addresses in the MOR's GUI.&lt;br /&gt;
&lt;br /&gt;
'''Blocked IPs''' can be used from '''Admin''' account and from '''Accountant''' account with Monitoring permissions enabled. From Admin account, go to '''Security -&amp;gt; Blocked IPs''' to manage blocked IPs. An IP can be blocked by entering valid input values and by clicking the '''Block''' icon. The to-be-blocked IP '''must not''' be local or a current server IP. By clicking on the Unblock icon, an IP is unblocked. All the blocking/unblocking changes will be active in '''one minute after they have been applied.''' Country information (flag) can take up to one hour to appear.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Mor blocked ips list.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
When IP is blocked manually, the reason is: MOR-BLOCKED-IP-FROM-GUI. When IP is automatically blocked by MOR, the reason says: fail2ban-AST_CLI_Attack. Below you see an example of how it looks in the GUI:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Blocekd_IPs_example.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Explanation of the values given in the '''Reason''' column can be found [[How_to_be_secure_using_MOR#Additional_software_to_increase_MOR_system_security|here]]. Reason &amp;quot;INPUT&amp;quot; means that IP was blocked manually by using these instructions: [[How to block someone%27s IP]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Reasons why IP was not blocked:&amp;lt;br&amp;gt;&lt;br /&gt;
 IP is incorrect or blank&amp;lt;br&amp;gt;&lt;br /&gt;
 IP is already blocked for this server&amp;lt;br&amp;gt;&lt;br /&gt;
 Cannot block server IP&amp;lt;br&amp;gt;&lt;br /&gt;
 IP address is private&amp;lt;br&amp;gt;&lt;br /&gt;
 IP address is local&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can search blocked IP. Possible search by a single IP or for the range using wildcard ''%'', like in the example.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:blocked_ips_search_mor.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Blocked IP format =&lt;br /&gt;
It is possible to block IPs in such a format:&lt;br /&gt;
* Single IP, for example, '''2.2.2.2'''&lt;br /&gt;
* Subnet in CIDR notation, for example, '''2.2.2.0/24'''. Please note that CIDR notation will be automatically converted to the canonical format. For example, if you enter 2.2.2.1/24, it will be converted to 2.2.2.0/24. This is because 2.2.2.0/24 denotes the range 2.2.2.1 - 2.2.2.254, so any subnet from 2.2.2.1/24 to 2.2.2.254/24 means exactly the same range, and a canonical way to represent this is range is with 2.2.2.0/24&lt;br /&gt;
* IP range in format x.x.x-xx, for example '''2.2.2.1-125'''. Please note that all IPs in the range will be blocked as separate IPs, so entering 2.2.2.1-125 would create 125 single IP entries. For this reason, we strongly recommend using subnets if possible.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= API automation =&lt;br /&gt;
&lt;br /&gt;
You can list, block, and unblock the same rows using '''[[MOR API v2#Blocked IPs|MOR API v2 — Blocked IPs]]''' (&amp;lt;code&amp;gt;GET/POST/DELETE /api/v2/blocked_ips&amp;lt;/code&amp;gt;). To '''check''' whether an IP is blocked or whitelisted without changing rows, use '''GET /api/v2/ip_access/status'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
* [[How to block someone's IP with iptables]]&lt;br /&gt;
* [[How to block country IP]]&lt;br /&gt;
* [[How to add Fail2ban exception for my IP]]&lt;br /&gt;
* [[Whitelisted IPs]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_v2_blocked_ips&amp;diff=31633</id>
		<title>MOR API v2 blocked ips</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_v2_blocked_ips&amp;diff=31633"/>
		<updated>2026-06-02T18:15:18Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;These endpoints manage rows on '''MOR - Blocked IPs''' (block, list, show, unblock). They complement the read-only diagnostic '''GET /api/v2/ip_access/status''' (check whether an arbitrary IP is blocked or whitelisted). Changes apply on the server within about one minute (same iptables pipeline as the GUI).  &amp;lt;br&amp;gt;&amp;lt;br&amp;gt; ==== Authentication and permissions ====  * '''Bearer JWT''' (same as other MOR API v2 methods). * User must be '''admin''' or '''accountant''' with...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These endpoints manage rows on '''[[MOR - Blocked IPs]]''' (block, list, show, unblock). They complement the read-only diagnostic '''GET /api/v2/ip_access/status''' (check whether an arbitrary IP is blocked or whitelisted). Changes apply on the server within about one minute (same iptables pipeline as the GUI).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== Authentication and permissions ====&lt;br /&gt;
&lt;br /&gt;
* '''Bearer JWT''' (same as other [[MOR API v2]] methods).&lt;br /&gt;
* User must be '''admin''' or '''accountant''' with '''monitorings_manage''' (read for list/show; write for block/unblock).&lt;br /&gt;
* Each call also requires the matching '''v2_blocked_ips_*''' method on the user’s API permission group (see API settings in the GUI).&lt;br /&gt;
* When '''Restrict API access by IP''' is enabled, the '''client''' IP must be allowed on [[Whitelisted IPs]] (management endpoints are '''not''' exempt — unlike '''ip_access/status''').&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== Endpoints ====&lt;br /&gt;
&lt;br /&gt;
Base path: &amp;lt;code&amp;gt;{Web_Dir}/api/v2/blocked_ips&amp;lt;/code&amp;gt; (for example &amp;lt;code&amp;gt;/billing/api/v2/blocked_ips&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Method !! Path !! ACL name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/blocked_ips&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;v2_blocked_ips_index&amp;lt;/code&amp;gt; || List blocked IPs (filters below).&lt;br /&gt;
|-&lt;br /&gt;
| GET || &amp;lt;code&amp;gt;/blocked_ips/{id}&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;v2_blocked_ips_show&amp;lt;/code&amp;gt; || Show one row. Optional query fallback: &amp;lt;code&amp;gt;ip&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;server_id&amp;lt;/code&amp;gt; when the numeric id is stale.&lt;br /&gt;
|-&lt;br /&gt;
| POST || &amp;lt;code&amp;gt;/blocked_ips&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;v2_blocked_ips_create&amp;lt;/code&amp;gt; || Block IP(s). Body/query: &amp;lt;code&amp;gt;ip&amp;lt;/code&amp;gt; (required), &amp;lt;code&amp;gt;server_id&amp;lt;/code&amp;gt; (integer or &amp;lt;code&amp;gt;all&amp;lt;/code&amp;gt;), &amp;lt;code&amp;gt;reason&amp;lt;/code&amp;gt; (optional; default &amp;lt;code&amp;gt;MOR-BLOCKED-IP-FROM-API-V2&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| DELETE || &amp;lt;code&amp;gt;/blocked_ips/{id}&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;v2_blocked_ips_destroy&amp;lt;/code&amp;gt; || Unblock (pending). Optional query fallback: &amp;lt;code&amp;gt;ip&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;server_id&amp;lt;/code&amp;gt;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There is '''no''' UPDATE method (reason cannot be changed via API; matches the GUI).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== List filters (GET /blocked_ips) ====&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;ip&amp;lt;/code&amp;gt; — SQL LIKE on blocked address; &amp;lt;code&amp;gt;%&amp;lt;/code&amp;gt; wildcard allowed.&lt;br /&gt;
* &amp;lt;code&amp;gt;reason&amp;lt;/code&amp;gt; — SQL LIKE prefix on reason/chain.&lt;br /&gt;
* &amp;lt;code&amp;gt;server_id&amp;lt;/code&amp;gt; — Restrict to one server.&lt;br /&gt;
* &amp;lt;code&amp;gt;from&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;max_results&amp;lt;/code&amp;gt; — Pagination (same style as other v2 list APIs).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== Input rules (POST) ====&lt;br /&gt;
&lt;br /&gt;
Same rules as '''[[MOR - Blocked IPs]]''':&lt;br /&gt;
&lt;br /&gt;
* Single IPv4, CIDR (canonicalized), or range &amp;lt;code&amp;gt;x.x.x-xx&amp;lt;/code&amp;gt; (expanded to multiple rows).&lt;br /&gt;
* Cannot block private, local, or server IPs.&lt;br /&gt;
* Duplicate block on the same server returns an error for that IP (see response below).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== Example responses ====&lt;br /&gt;
&lt;br /&gt;
'''List (200):'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;blocked_ips&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;id&amp;quot;: 42,&lt;br /&gt;
      &amp;quot;ip&amp;quot;: &amp;quot;203.0.113.10&amp;quot;,&lt;br /&gt;
      &amp;quot;server_id&amp;quot;: 1,&lt;br /&gt;
      &amp;quot;server_label&amp;quot;: &amp;quot;ID: 1, IP: 10.0.0.1&amp;quot;,&lt;br /&gt;
      &amp;quot;reason&amp;quot;: &amp;quot;MOR-BLOCKED-IP-FROM-API-V2&amp;quot;,&lt;br /&gt;
      &amp;quot;country&amp;quot;: &amp;quot;United States&amp;quot;,&lt;br /&gt;
      &amp;quot;status&amp;quot;: &amp;quot;active&amp;quot;,&lt;br /&gt;
      &amp;quot;pending&amp;quot;: false&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: { &amp;quot;from&amp;quot;: 1, &amp;quot;max_results&amp;quot;: 50, &amp;quot;returned&amp;quot;: 1 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;status&amp;lt;/code&amp;gt; is &amp;lt;code&amp;gt;active&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;block_pending&amp;lt;/code&amp;gt;, or &amp;lt;code&amp;gt;unblock_pending&amp;lt;/code&amp;gt; (grey rows in the GUI while iptables catches up).&lt;br /&gt;
&lt;br /&gt;
'''Create (201):''' returns &amp;lt;code&amp;gt;blocked_ips&amp;lt;/code&amp;gt; for rows accepted. If some parsed IPs fail validation, response is still '''201''' with &amp;lt;code&amp;gt;warnings&amp;lt;/code&amp;gt; (each entry has &amp;lt;code&amp;gt;ip&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;error&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
'''Create (422):''' when input is empty, not parseable, or every IP was rejected — &amp;lt;code&amp;gt;errors&amp;lt;/code&amp;gt; plus &amp;lt;code&amp;gt;warnings&amp;lt;/code&amp;gt; when per-IP messages exist.&lt;br /&gt;
&lt;br /&gt;
'''Unblock (200):''' &amp;lt;code&amp;gt;{ &amp;quot;status&amp;quot;: &amp;quot;unblock_pending&amp;quot;, &amp;quot;id&amp;quot;: 42, &amp;quot;message&amp;quot;: &amp;quot;…&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Not found (404):''' &amp;lt;code&amp;gt;{ &amp;quot;errors&amp;quot;: &amp;quot;Blocked IP was not found&amp;quot; }&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''ACL denied (403):''' &amp;lt;code&amp;gt;API method not permitted: v2_blocked_ips_*&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== Quick start (curl) ====&lt;br /&gt;
&lt;br /&gt;
Replace host, credentials, and JWT flow with your environment.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# 1) Obtain JWT (example — use your deployment’s auth endpoint)&lt;br /&gt;
TOKEN=&amp;quot;…&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 2) List&lt;br /&gt;
curl -sS -H &amp;quot;Authorization: Bearer $TOKEN&amp;quot; \&lt;br /&gt;
  &amp;quot;https://example.com/billing/api/v2/blocked_ips?max_results=10&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 3) Block a public IP on server 1&lt;br /&gt;
curl -sS -X POST -H &amp;quot;Authorization: Bearer $TOKEN&amp;quot; -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
  -d '{&amp;quot;ip&amp;quot;:&amp;quot;203.0.113.55&amp;quot;,&amp;quot;server_id&amp;quot;:1,&amp;quot;reason&amp;quot;:&amp;quot;SOAR-incident-42&amp;quot;}' \&lt;br /&gt;
  &amp;quot;https://example.com/billing/api/v2/blocked_ips&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# 4) Unblock by id&lt;br /&gt;
curl -sS -X DELETE -H &amp;quot;Authorization: Bearer $TOKEN&amp;quot; \&lt;br /&gt;
  &amp;quot;https://example.com/billing/api/v2/blocked_ips/42&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[MOR - Blocked IPs]] — GUI, iptables timing, search wildcards&lt;br /&gt;
* [[MOR API v2]] — general v2 auth and ACL&lt;br /&gt;
* [[Whitelisted IPs]] — client IP restriction when enabled&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_v2&amp;diff=31632</id>
		<title>MOR API v2</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_v2&amp;diff=31632"/>
		<updated>2026-06-02T18:14:08Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=About=&lt;br /&gt;
MOR API lets other software interact with MOR without knowing the internal structure of the database (DB) and other logic.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=MOR users that are allowed to use the MOR API=&lt;br /&gt;
* Admin&lt;br /&gt;
* Reseller&lt;br /&gt;
* Accountant&lt;br /&gt;
* Simple User&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Client IP restriction (optional) =&lt;br /&gt;
&lt;br /&gt;
Administrators can limit API use by client IPv4 address: enable '''Restrict API access by IP''' under [[Configuration from GUI]] (together with '''Allow API globally'''), then mark which addresses may call the API on [[Whitelisted IPs]] ('''Allow API access''' per row). When the restriction is off, API behavior is unchanged. Details: configuration in [[Configuration from GUI]]; per-IP flags on [[Whitelisted IPs]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
Open the GUI using the MOR IP/domain http://IP_or_Domain/billing/api/v2/api-docs/.&lt;br /&gt;
&lt;br /&gt;
Press on '''Authorize''' and enter User credentials (Admin, Manager, Reseller, or User) into the '''basicAuth''' field and press '''Authorize'''.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_basicAuth.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_basicAuth_login.png]] &lt;br /&gt;
&lt;br /&gt;
Copy the token and use it for JWT authentication.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth_execute.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth_token.png]]&lt;br /&gt;
&lt;br /&gt;
Enter the token into the '''bearerAuthorization''' authorization field and press '''Authorize'''.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_bearerAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
You can now use the available APIs. Expand them to see the documentation.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=APIs=&lt;br /&gt;
&lt;br /&gt;
==Active Calls==&lt;br /&gt;
* [[MOR_API_drop_active_calls|drop_active_calls]] - drop active calls.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calls==&lt;br /&gt;
* [[MOR_API_v2_Calls|retrieve_calls]] - retrieves the list of calls in the selected time period for the specified User/Device.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DIDs ==&lt;br /&gt;
* [[MOR API v2 DIDs|dids]] — list DIDs visible to the authenticated admin or accountant (JSON).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Flash Calls==&lt;br /&gt;
* [[MOR API flash calls|flash_calls]] - initiate a Flash Call.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Ring Groups ==&lt;br /&gt;
* [[MOR API v2 ring_groups|ring_groups]] - List ring groups with member device extensions and caller IDs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Security==&lt;br /&gt;
&lt;br /&gt;
* [[MOR API v2 blocked_ips|blocked_ips]] - Manage [[MOR - Blocked IPs]].&lt;br /&gt;
* [[MOR API IP access|ip_access]] - Read-only check whether an IPv4 address appears in MOR Monitorings block/whitelist lists.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Users ==&lt;br /&gt;
&lt;br /&gt;
* '''[[MOR API v2 user_assign_provider|user_assign_provider]]''' — Assign or unassign an unassigned [[Providers|provider]] to a simple [[Users|user]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==AI Transcriptions==&lt;br /&gt;
* [[MOR API Transcriptions AI|AI Transcriptions]] - recording voice-to-text.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=Wholesale_Tariff&amp;diff=31631</id>
		<title>Wholesale Tariff</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=Wholesale_Tariff&amp;diff=31631"/>
		<updated>2026-06-02T16:39:48Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Make Wholesale Tariff */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=What is a Wholesale Tariff?=&lt;br /&gt;
&lt;br /&gt;
This tariff is a price list which you get from your provider, later you can transform this tariff into retail or user wholesale tariffs. Without a transformation this tariff cannot be assigned to user.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Min Time = &lt;br /&gt;
&lt;br /&gt;
Min(imal) Time is the minimum time that will be billed if a call is answered.&lt;br /&gt;
&lt;br /&gt;
For example: &lt;br /&gt;
&lt;br /&gt;
* Min Time = 10s&lt;br /&gt;
* If the actual length of a call is &amp;lt;= 10s, billsec = 10.&lt;br /&gt;
* If the actual length of a call is &amp;gt; 10s, then billsec = actual call length.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
| '''Actual call length''' || '''Call time which will be billed'''&lt;br /&gt;
|- &lt;br /&gt;
| 1 || 10&lt;br /&gt;
|- &lt;br /&gt;
| 2 || 10&lt;br /&gt;
|- &lt;br /&gt;
| ... || 10&lt;br /&gt;
|- &lt;br /&gt;
| 9 || 10&lt;br /&gt;
|- &lt;br /&gt;
| 10 || 10&lt;br /&gt;
|- &lt;br /&gt;
| 11 || 11&lt;br /&gt;
|- &lt;br /&gt;
| 12 || 12&lt;br /&gt;
|- &lt;br /&gt;
| ... || ...&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Increment =&lt;br /&gt;
&lt;br /&gt;
An Increment is the amount of time in which a call is billed. It is counted in seconds.&lt;br /&gt;
&lt;br /&gt;
For example, assume that:&lt;br /&gt;
&lt;br /&gt;
* A particular call lasts for 15 seconds.&lt;br /&gt;
* The rate for 1 min is (for the sake of simplicity) 1 EUR/min.&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
&lt;br /&gt;
* If the increment is 1, then the call length will be counted as 15s and the call price will be 0.25 EUR (1/60*15). As the increment is 1, the call can be 1, 2, 3... in length. 15s is the exact length of the call.&lt;br /&gt;
* If the increment is 10, then the call length will be counted as 20s and the call price will be 0.333 EUR (1/60*20). As the increment is 10, the call can be 10, 20, 30... in length. 20s is nearest to 15.&lt;br /&gt;
* If the increment is 20, then the call length will be counted as 20s and the call price will be 0.333 EUR (1/60*20). As the increment is 20, the call can be 20, 40, 60... in length. 20s is nearest to 15.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Make Wholesale Tariff with CLI Groups/Prefixes=&lt;br /&gt;
&lt;br /&gt;
'''Make Wholesale Tariff''' builds a new wholesale tariff from an existing one: rates are copied and your amount/percent markups are applied. When the source tariff has rates with '''CLI Groups''' (CLI prefixes per destination), those prefixes are carried to the new tariff. For what CLI Groups are and how rating uses them, see [[CLI Groups - CLI Prefixes]].&lt;br /&gt;
&lt;br /&gt;
'''Menu path:''' '''SETTINGS → Billing → [[Tariffs]]''' → select a tariff → '''Make Wholesale Tariff'''.&lt;br /&gt;
&lt;br /&gt;
'''CLI Groups on the form'''&amp;lt;br&amp;gt;&lt;br /&gt;
Before you choose the wholesale tariff type and click '''Make Tariff''', the form shows a '''CLI Groups''' choice:&lt;br /&gt;
&lt;br /&gt;
* '''Copy CLI Groups''' (default) — the new tariff gets its own CLI Group copies. Editing CLI prefixes on the new tariff does not change the source tariff.&lt;br /&gt;
* '''Reuse CLI Groups''' — new rates point to the same CLI Group records as the source tariff. Changing prefixes on one tariff can affect the other.&lt;br /&gt;
&lt;br /&gt;
Use '''Copy''' when you mark up a supplier tariff for resale and need isolated prefix lists. Use '''Reuse''' only when you intentionally want shared CLI Groups between the source and the new tariff.&lt;br /&gt;
&lt;br /&gt;
If the source tariff has no CLI Groups on its rates, this section has no effect — the new tariff is created as before.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= See also = &lt;br /&gt;
* [[MOR_Manual#Tariffs | Tariffs]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_v2&amp;diff=31630</id>
		<title>MOR API v2</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_v2&amp;diff=31630"/>
		<updated>2026-06-02T16:34:11Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=About=&lt;br /&gt;
MOR API lets other software interact with MOR without knowing the internal structure of the database (DB) and other logic.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=MOR users that are allowed to use the MOR API=&lt;br /&gt;
* Admin&lt;br /&gt;
* Reseller&lt;br /&gt;
* Accountant&lt;br /&gt;
* Simple User&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Client IP restriction (optional) =&lt;br /&gt;
&lt;br /&gt;
Administrators can limit API use by client IPv4 address: enable '''Restrict API access by IP''' under [[Configuration from GUI]] (together with '''Allow API globally'''), then mark which addresses may call the API on [[Whitelisted IPs]] ('''Allow API access''' per row). When the restriction is off, API behavior is unchanged. Details: configuration in [[Configuration from GUI]]; per-IP flags on [[Whitelisted IPs]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
Open the GUI using the MOR IP/domain http://IP_or_Domain/billing/api/v2/api-docs/.&lt;br /&gt;
&lt;br /&gt;
Press on '''Authorize''' and enter User credentials (Admin, Manager, Reseller, or User) into the '''basicAuth''' field and press '''Authorize'''.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_basicAuth.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_basicAuth_login.png]] &lt;br /&gt;
&lt;br /&gt;
Copy the token and use it for JWT authentication.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth_execute.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth_token.png]]&lt;br /&gt;
&lt;br /&gt;
Enter the token into the '''bearerAuthorization''' authorization field and press '''Authorize'''.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_bearerAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
You can now use the available APIs. Expand them to see the documentation.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=APIs=&lt;br /&gt;
&lt;br /&gt;
==Active Calls==&lt;br /&gt;
* [[MOR_API_drop_active_calls|drop_active_calls]] - drop active calls.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calls==&lt;br /&gt;
* [[MOR_API_v2_Calls|retrieve_calls]] - retrieves the list of calls in the selected time period for the specified User/Device.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DIDs ==&lt;br /&gt;
* [[MOR API v2 DIDs|dids]] — list DIDs visible to the authenticated admin or accountant (JSON).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Flash Calls==&lt;br /&gt;
* [[MOR API flash calls|flash_calls]] - initiate a Flash Call.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Ring Groups ==&lt;br /&gt;
* [[MOR API v2 ring_groups|ring_groups]] - List ring groups with member device extensions and caller IDs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Security==&lt;br /&gt;
&lt;br /&gt;
* [[MOR API IP access|ip_access]] - Read-only check whether an IPv4 address appears in MOR Monitorings block/whitelist lists.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Users ==&lt;br /&gt;
&lt;br /&gt;
* '''[[MOR API v2 user_assign_provider|user_assign_provider]]''' — Assign or unassign an unassigned [[Providers|provider]] to a simple [[Users|user]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==AI Transcriptions==&lt;br /&gt;
* [[MOR API Transcriptions AI|AI Transcriptions]] - recording voice-to-text.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API&amp;diff=31629</id>
		<title>MOR API</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API&amp;diff=31629"/>
		<updated>2026-06-02T16:33:40Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:warning.png|100px|alt=&amp;quot;warning&amp;quot;|link=]]&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;IMPORTANT!!! API methods described here are for newest MOR version. For previous versions please check appropriate [http://wiki.kolmisoft.com/index.php/MOR_Manual#Old_Manuals manual].&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
[[File:api.png|right|alt=&amp;quot;api&amp;quot;|link=]]&lt;br /&gt;
&amp;lt;mkmeta&amp;gt;Application Program Interface for MOR Class 5 Softswitch&amp;lt;/mkmeta&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=About=&lt;br /&gt;
MOR API lets other software interact with MOR without knowing the internal structure of the database (DB) and other logic.&lt;br /&gt;
&lt;br /&gt;
MOR accepts requests by HTML POST and returns results in XML.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=MOR users that are allowed to use MOR API=&lt;br /&gt;
* Admin&lt;br /&gt;
* Reseller&lt;br /&gt;
* Accountant - only by using Admin Hash and Secret key&lt;br /&gt;
* Simple User&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Client IP restriction (optional) =&lt;br /&gt;
&lt;br /&gt;
Administrators can limit API use by client IPv4 address: enable '''Restrict API access by IP''' under [[Configuration from GUI]] (together with '''Allow API globally'''), then mark which addresses may call the API on [[Whitelisted IPs]] ('''Allow API access''' per row). When the restriction is off, API behavior is unchanged. Details: configuration in [[Configuration from GUI]]; per-IP flags on [[Whitelisted IPs]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=[[MOR API Permission Groups]]=&lt;br /&gt;
Fine-grained allow lists for hash-protected [[MOR API]] methods. Assign a group to integration users so they can call only the API actions you permit.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Functions=&lt;br /&gt;
&lt;br /&gt;
== API Related ==&lt;br /&gt;
* [[API Configuration]] – configuration options for API.&lt;br /&gt;
* [[MOR API hash construction|Hash construction]] – how to construct hash to authenticate data over API.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Aggregate==&lt;br /&gt;
* [[MOR API aggregate get | aggregate_get]] - for getting MOR aggregate statistics. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Autodialer==&lt;br /&gt;
* [[MOR API autodialer upload numbers | autodialer_upload_numbers]] - upload numbers from CSV file to existing Autodialer Campaign.&lt;br /&gt;
* [[MOR API autodialer get campaign statistics | autodialer_get_campaign_statistics]] - gets Autodialer campaign statistics for selected period.&lt;br /&gt;
* [[MOR API autodialer redial all failed calls | autodialer_redial_all_failed_calls]] - initiate Redial all failed calls action for specific campaign.&lt;br /&gt;
* [[MOR API autodialer get campaign ivr poll results | autodialer_get_campaign_ivr_poll_results]] - gets Autodialer camoaign ivr poll results.&lt;br /&gt;
* [[MOR API autodialer change campaign status | autodialer_change_campaign_status]] - changes Autodialer campaign status.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Balance==&lt;br /&gt;
* [[MOR API user balance update | user_balance_update]] (change_user_balance) – changes User's Balance&lt;br /&gt;
Various methods to retrieve User balance&lt;br /&gt;
* [[MOR API user_balance_get|user_balance_get]] (balance) – retrieves a User Balance.&lt;br /&gt;
* [[Balance in phone | user_simple_balance_get]] (simple_balance) – gets User's Balance&lt;br /&gt;
* [[MOR API user balance get by psw | user_balance_get_by_psw]] – gets User's Balance by his owned Device's Password&lt;br /&gt;
* [[MOR API User Balance get by Username | user_balance_get_by_username]] – gets User's Balance by his owned Device's Username&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Callback==&lt;br /&gt;
NOTE: A Callback addon is needed. Does not work on a limited version.&lt;br /&gt;
* [[MOR API callback init|callback_init]] (callback) – initiates callback.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calling Cards==&lt;br /&gt;
* [[MOR API card_by_cli_update| card_by_cli_update]] (cc_by_cli) – creates and updates calling cards, including adding and transferring funds, by being identified according the Caller_ID.&lt;br /&gt;
* [[MOR API card_from_group_sell| card_from_group_sell]] (buy_card_from_callingroup) – sells cards from calling card group.&lt;br /&gt;
* [[MOR API card_group_get| card_group_get]] (show_calling_card_group) – show calling group info.&lt;br /&gt;
* [[MOR API card_balance_get| card_balance_get]] (card_balance_get) – show card's balance.&lt;br /&gt;
* [[MOR API card_payment_add| card_payment_add]] – add payment to the calling card.&lt;br /&gt;
* [[MOR_API_Calling_Cards_create| calling_cards_create]] – create Calling Cards.&lt;br /&gt;
* [[MOR_API_Calling_Card_update| calling_card_update]] – update Calling Card.&lt;br /&gt;
* [[MOR_API_Calling_Cards_get| calling_cards_get]] - get Calling Cards.&lt;br /&gt;
* [[MOR_API_Card_Group_create| cc_group_create]] – create Card Group.&lt;br /&gt;
* [[MOR_API_Card_Group_update| cc_group_update]] – update Card Group.&lt;br /&gt;
* [[MOR API Card Groups get| cc_groups_get]] – show Calling Cards Group info.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calls==&lt;br /&gt;
* [[MOR API user calls get|user_calls_get]] (user_calls) – retrieves a list of calls in a selected time period for a user/device.&lt;br /&gt;
* [[MOR API local calls get|local_calls_get]] - retrieves a list of local calls in a selected time period for a user.&lt;br /&gt;
* [[MOR_API_active_calls_get|active_calls_get]] - Retrieves list of active calls for specified User.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Conflines==&lt;br /&gt;
* [[MOR API conflines update|conflines_update]] – changes settings for API, Default User or Default Device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Credit notes==&lt;br /&gt;
* [[MOR API credit_notes_get| credit_notes_get]] (credit_notes) – credit notes list.&lt;br /&gt;
* [[MOR API credit_note_update| credit_note_update]] – credit note update.&lt;br /&gt;
* [[MOR API credit_notes_create| credit_note_create]] – credit note create.&lt;br /&gt;
* [[MOR API credit_notes_delete| credit_note_delete]] – credit note delete.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Currencies==&lt;br /&gt;
* [[MOR_API_Exchange_rate_update|exchange_rate_update]] - Currency Exchange rate update.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Device==&lt;br /&gt;
&lt;br /&gt;
* [[MOR API device create| device_create]] – create device&lt;br /&gt;
* [[MOR_API_device_update | device_update]]  –  update device settings.&lt;br /&gt;
* [[MOR API device delete| device_delete]] (delete_device) – delete device&lt;br /&gt;
* [[MOR API devices get | devices_get]] (device_list) – users device list&lt;br /&gt;
* [[MOR API device details get | device_details_get]] – shows all information about specified device.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [[MOR API device callflow get| device_callflow_get]] - returns information about specified device callflow state.&lt;br /&gt;
* [[MOR API device callflow update | device_callflow_update]] – updates information of specified device callflow state. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [[MOR API CLI info get | cli_info_get]] (cli_get_info) – shows id of device where CLI belongs.&lt;br /&gt;
* [[MOR API CLI delete | cli_delete]] – deletes specified CLI. &lt;br /&gt;
* [[MOR API CLI add | cli_add]] – creates CLI and assigns it to the specified device.&lt;br /&gt;
* [[MOR API device clis get | device_clis_get]] – CLIs list by User and/or Device&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* [[MOR API device rules get | device_rules_get]] – show Device Rules.&lt;br /&gt;
* [[MOR API device rule delete | device_rule_delete]] – delete Device Rule.&lt;br /&gt;
* [[MOR API device rule create | device_rule_create]] – create Device Rule.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==DID==&lt;br /&gt;
&lt;br /&gt;
* [[MOR API dids get| dids_get]] – get list of particular DIDs&lt;br /&gt;
* [[MOR API did_create| did_create]] – DID create&lt;br /&gt;
* [[MOR_API_did_device_assign| did_device_assign]] (did_assign_device) – Assign Device to DID&lt;br /&gt;
* [[MOR_API_did_trunk_device_assign| did_trunk_device_assign]] (did_trunk_device_assign) – Assign Trunk Device to DID&lt;br /&gt;
* [[MOR_API_did_device_unassign| did_device_unassign]] (did_unassign_device) – Unassign Device from DID&lt;br /&gt;
* [[MOR_API_did_details_update| did_details_update]] (did_details_update) – Update DID details &lt;br /&gt;
* [[MOR API did subscription stop|did_subscription_stop]] – STOP DID subscription&lt;br /&gt;
* [[MOR API did terminate|did_terminate]] – DID terminate&lt;br /&gt;
* [[MOR API did make free|did_make_free]] – DID make free&lt;br /&gt;
* [[MOR API did rates update|did_rates_update]] – Update DID rates&lt;br /&gt;
* [[MOR API did rates get|did_rates_get]] – Get DID rates&lt;br /&gt;
* [[MOR API did close|did_close]] – close the DID&lt;br /&gt;
* [[MOR API did delete|did_delete]] – delete the DID&lt;br /&gt;
* [[MOR API did rates details get|did_rates_details_get]] – Get DID rates details&lt;br /&gt;
* [[MOR API did rates details update|did_rates_details_update]] – Update DID rates details&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Email==&lt;br /&gt;
* [[MOR API email send| email_send]] (send_email) – send Email.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Financial statements==&lt;br /&gt;
* [[MOR API financial_statements_get| financial_statements_get]] (financial_statements) – financial statements list.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Invoices==&lt;br /&gt;
* [[MOR API invoices_get|invoices_get]] (invoices) – retrieves a list of invoices in a selected time period.&lt;br /&gt;
* [[MOR_API_invoice_update|invoice_update]] - update Invoice&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==IVR==&lt;br /&gt;
* [[MOR_API_ivr_dial_plan_update|ivr_dial_plan_update]] (invoices) – Updates IVR dial plan.&lt;br /&gt;
* [[MOR_API_ivr_time_period_update|ivr_time_period_update]] (invoices) – Updates IVR time period.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==LCR==&lt;br /&gt;
* [[MOR API lcrs_get|lcrs_get]] - retrieves list of LCRs.&lt;br /&gt;
* [[MOR API lcr_create|lcr_create]] - creates LCR&lt;br /&gt;
* [[MOR API lcr_update|lcr_update]] - updates LCR&lt;br /&gt;
* [[MOR API lcr_delete|lcr_delete]] - updates LCR&lt;br /&gt;
* [[MOR API lcr_add_provider|lcr_add_provider]] - adds provider to LCR&lt;br /&gt;
* [[MOR API lcr_delete_provider|lcr_delete_provider]] - deletes provider from LCR&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Location Rules==&lt;br /&gt;
* [[MOR API location_rule_create|location_rule_create]] – creates location rule.&lt;br /&gt;
* [[MOR API location_rule_update|location_rule_update]] – updates location rule.&lt;br /&gt;
* [[MOR API location_rules_get|location_rules_get]] – retrieves location rules.&lt;br /&gt;
* [[MOR API location_rule_get|location_rule_get]] – retrieves location rule information.&lt;br /&gt;
* [[MOR API location_rule_copy|location_rule_copy]] – copies rule from one location to other one.&lt;br /&gt;
* [[MOR API location_rule_delete|location_rule_delete]] – delete location rule.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Login==&lt;br /&gt;
* [[MOR API user_login|user_login]] (login) – logs user in to MOR.&lt;br /&gt;
* [[MOR API user_logout|user_logout]] (logout) – logs user out from MOR.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Monitorings==&lt;br /&gt;
* [[MOR API ma_activate_api| ma_activate]] – turn on monitorings addon&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Number Pools==&lt;br /&gt;
* [[MOR API number_pools_get| number_pools_get]] – get Number Pools list&lt;br /&gt;
* [[MOR API number_pool_create| number_pool_create]] – create Number Pools&lt;br /&gt;
* [[MOR API number pool update| number_pool_update]] – update Number Pool&lt;br /&gt;
* [[MOR API number pool delete| number_pool_delete]] – delete Number Pool&lt;br /&gt;
* [[MOR API number pool numbers create| number_pool_numbers_create]] – create numbers for Number Pool&lt;br /&gt;
* [[MOR API number pool numbers delete| number_pool_numbers_delete]] – delete numbers from Number Pool&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Payments==&lt;br /&gt;
* [[MOR API payment_create| payment_create]] (create_payment) – create payment.&lt;br /&gt;
* [[MOR API payments_get| payments_get]] (payments_list) – payments list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==PBX Pool==&lt;br /&gt;
* [[MOR API pbx_pool_create| pbx_pool_create]] – PBX Pool create.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Phonebooks==&lt;br /&gt;
* [[MOR API phonebooks_get| phonebooks_get]] (phonebooks_api ) – phonebooks list.&lt;br /&gt;
* [[MOR API phonebook_edit| phonebook_edit]] (phonebook_edit_api) – edit phonebook.&lt;br /&gt;
* [[MOR API phonebook_record_create| phonebook_record_create]]  – create phonebook.&lt;br /&gt;
* [[MOR API phonebook record delete | phonebook record delete]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Providers==&lt;br /&gt;
* [[MOR API providers get| providers_get]]  – getting list of providers.&lt;br /&gt;
* [[MOR API provider create| provider_create]]  – create provider.&lt;br /&gt;
* [[MOR API provider update| provider_update]]  – update provider.&lt;br /&gt;
* [[MOR API provider delete| provider_delete]]  – delete provider.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
=== Provider Rules===&lt;br /&gt;
* [[MOR_API_provider_rules_get| provider_rules_get]] - shows provider rules&lt;br /&gt;
* [[MOR_API_provider_rule_delete| provider_rules_delete]] - deletes provider rules&lt;br /&gt;
* [[MOR_API_provider_rule_create| provider_rules_create]] - creates provider rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Queue==&lt;br /&gt;
* [[MOR API queue log get| queue_log_get]]  – getting MOR queue log.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Quickforwards==&lt;br /&gt;
* [[MOR API Quickforwards get| quickforwards_dids_get]] (quickforwards_dids_get) – get Quickforwards.&lt;br /&gt;
* [[MOR API Quickforwards update| quickforwards_did_update]] (quickforwards_did_update) – update Quickforwards.&lt;br /&gt;
* [[MOR API Quickforwards delete| quickforwards_did_delete]] (quickforwards_did_delete) – delete Quickforwards.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Tariffs/Rates==&lt;br /&gt;
* [[MOR API rate get|rate_get]] (rate) – check user rate by prefix&lt;br /&gt;
* [[MOR API tariff rates get| tariff_rates_get]] (get_tariff) – get all tariff's rates&lt;br /&gt;
* [[MOR API tariff_retail_import | tariff_retail_import ]] (import_retail_tariff) – import xml retail tariff&lt;br /&gt;
* [[MOR API tariff_wholesale_update | tariff_wholesale_update ]] (wholesale_tariff) – update or create wholesale tariff&lt;br /&gt;
* [[MOR API tariffs_get|tariffs_get]] - retrieve list of tariffs&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Recordings==&lt;br /&gt;
* [[MOR API recordings get| recordings_get]] – get MOR recordings.&lt;br /&gt;
* [[MOR API recording update| recording_update]] -  update comment for a specific recording.&lt;br /&gt;
* [[MOR API recordings delete | recordings_delete]] - delete recordings based on search parameters.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Resellers ==&lt;br /&gt;
* [[MOR API reseller group create|reseller_group_create]] - create new Reseller Group&lt;br /&gt;
* [[MOR API reseller_groups_get|reseller_groups_get]] - retrieve Reseller Groups&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Services==&lt;br /&gt;
* [[MOR API Service create| service_create]] – create Service.&lt;br /&gt;
* [[MOR API Service delete| service_delete]] – delete Service.&lt;br /&gt;
* [[MOR API Services get| services_get]] – get Services.&lt;br /&gt;
* [[MOR API Service update| service_update]] – update Service.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Spy==&lt;br /&gt;
* [[MOR API spy_call | spy_call]] – Initiates a spy call.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Statistics==&lt;br /&gt;
* [[MOR API quickstats_get | quickstats_get]] – gets today's [[Quick Stats]] and [[Active Calls]] count&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==Subscriptions==&lt;br /&gt;
* [[MOR API subscription delete|subscription_delete]] - Subscription delete.&lt;br /&gt;
* [[MOR API Subscriptions get|subscriptions_get]] - Subscriptions get.&lt;br /&gt;
* [[MOR API subscription create|subscription_create]] - Subscription create.&lt;br /&gt;
* [[MOR API subscription create bulk|subscription_create_bulk]] - Bulk Subscription create.&lt;br /&gt;
* [[MOR API subscription update|subscription_update]] - Subscription update.&lt;br /&gt;
* [[MOR API Subscription Flat Rate Number Status Get| subscription_flat_rate_number_status_get]] -  check prefix covering flat-rate subscriptions&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==User==&lt;br /&gt;
&lt;br /&gt;
* [[MOR API user_register| user_register]] – create new user from params.&lt;br /&gt;
* [[MOR API user_details_get | user_details_get]] (user_details) – gets user details.&lt;br /&gt;
* [[MOR API user_details_raw_get | user_details_raw_get]] (user_raw_details) – gets user raw details from database.&lt;br /&gt;
* [[MOR_API_user_details_update| user_details_update]] (user_update_api) – update user from params.&lt;br /&gt;
* [[MOR API users_get| users_get]] - get user list&lt;br /&gt;
* [[MOR API user_delete| user_delete]] - deletes user&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Version==&lt;br /&gt;
* [[MOR API system version get| system_version_get]] (get_version) – get MOR version number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Vouchers==&lt;br /&gt;
* [[MOR API voucher use| voucher_use]] – use selected voucher.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= Examples =&lt;br /&gt;
* [[MOR API PHP Examples]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=HTML POST=&lt;br /&gt;
All requests are in a similar format:&lt;br /&gt;
&lt;br /&gt;
 HTML POST: http://&amp;lt;SERVER_IP&amp;gt;/billing/api/&amp;lt;function&amp;gt;?u=username&lt;br /&gt;
&lt;br /&gt;
* username - the user name and password of the user who is asking for the data. &lt;br /&gt;
&lt;br /&gt;
If the user has 'admin' rights, he will get more results and can perform more actions compared to a user who does not have such rights.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=Useful to know=&lt;br /&gt;
&lt;br /&gt;
* All API methods return data straight from the database. It means that MOR GUI settings do not affect data, it will be returned as it is saved in the database. For example:&lt;br /&gt;
** Value of money will be returned in Default System [[Currencies|Currency]].&lt;br /&gt;
** Date will not be affected by [[Configuration_from_GUI#Visual| Default date format]] setting.&lt;br /&gt;
** Value of money will not be affected by [[Configuration_from_GUI#Visual|Number digits]] setting.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=See also =&lt;br /&gt;
* [[API Configuration]]&lt;br /&gt;
* [[MOR integration]]&lt;br /&gt;
* [[How to block access to some API functions]]&lt;br /&gt;
* [[MOR API v2]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=Configuration_from_GUI&amp;diff=31628</id>
		<title>Configuration from GUI</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=Configuration_from_GUI&amp;diff=31628"/>
		<updated>2026-06-02T16:30:04Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Where I can find this settings menu?=&lt;br /&gt;
&lt;br /&gt;
You can find this menu in '''SETTINGS –&amp;gt; Setup –&amp;gt; Settings'''&lt;br /&gt;
&lt;br /&gt;
[[File:Settings_path.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Global ==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; [[Global_Settings | Global]]'''&lt;br /&gt;
&lt;br /&gt;
* '''Company''' – name of the company.&lt;br /&gt;
* '''Company email''' – email address of the company.&lt;br /&gt;
* '''Version''' – version number.&lt;br /&gt;
* '''Copyright Title''' – copyright title supports html text format.&lt;br /&gt;
* '''Browser Title''' – browser title for MOR GUI.&lt;br /&gt;
* '''Front Page Text''' – some text to place on front page.&lt;br /&gt;
* '''Login Page Text''' – some text to place on login page&lt;br /&gt;
* '''Show logo on first page''' - untick to hide logo on the start page&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Users ==&lt;br /&gt;
&lt;br /&gt;
* '''Show Calls statistics to User for last''' – number of Calls statistics to show in days. For example, if you enter 5 days, users will only see 5 days old calls, they will not be able to check older calls.&lt;br /&gt;
* '''Show user_billsec for Users instead of billsec''' – shows user_billsec instead of billsec in Users invoices and last calls. Notice that Billsec shows real Call duration, user_billsec shows Call duration after minimal time or increment applied. For example, if user tariff has 60 sec minimal time and user made a Call for 20 sec, then billsec will show 20 sec and user_billsec will show 60 sec (minimal time is applied).&lt;br /&gt;
* '''Hide device passwords for users''' – do not display device passwords for users.&lt;br /&gt;
* ''' Hide Device username for Users'''  – do not display device username for users.&lt;br /&gt;
* '''Hide payment options for postpaid users''' - will hide the payment option for all postpaid users (including Resellers if they are postpaid).&lt;br /&gt;
* '''Hide non-completed payments for user''' – hides non-completed payments (the ones which are started in MOR, but are not completed in a payment gateway website).&lt;br /&gt;
* '''Hide Recordings for all users''' – hides recordings for all system users from menu and device settings.&lt;br /&gt;
* '''Allow User to assign DID to Device''' – lets User to assign DID to Device.&lt;br /&gt;
* '''Allow User to assign DID to Trunk''' – lets User to Assign DID to Trunk.&lt;br /&gt;
* '''Do not allow users to change their email addresses'''&lt;br /&gt;
* '''Do not allow users to change their Personal Details'''&lt;br /&gt;
* '''Change ANSWER to FAILED if HGC not equal to 16 for Users''' – changes the Hangupcause for users in call reports from Answered to Failed if Hangupcause is not 16.&lt;br /&gt;
* '''Do not allow PREPAID User balance drop below zero (block them instead)'''&lt;br /&gt;
* '''Do not block POSTPAID User when balance goes bellow zero on subscription count'''&lt;br /&gt;
* '''Allow identical email addresses to different Users''' – allows creating Users or registering users with identical email addresses. After checking this setting you will be not able to check.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Devices ==&lt;br /&gt;
&lt;br /&gt;
* '''Device PIN length''' – length for automatically generated PIN codes for devices.&lt;br /&gt;
* '''Device range MIN''' – from which extension automatic extension assigning starts.&lt;br /&gt;
* '''Device range MAX''' – till which extension automatic extension assigning goes.&lt;br /&gt;
** For example, from this interval: [Device range MIN, Device range MAX] MOR will select extensions for newly created Devices.&lt;br /&gt;
* '''Random Device Extension''' – when creating device, random number from '''Device Range''' will be taken.&lt;br /&gt;
* '''Enable &amp;quot;Allowed addresses&amp;quot; option for Devices:'''  – allows [[Device_settings#Allowed_Addresses | Allowed Addresses]] functionality in Devices settings.&lt;br /&gt;
* '''Do not allow duplicate device user names'''&lt;br /&gt;
* '''Inform when Devices are created or updated''' – check to get an email about every newly created or updated Device.&lt;br /&gt;
* '''Allow same IP and Port combinations in multiple Devices''' – allows creating Devices with the same IP and Port combination.&lt;br /&gt;
* '''Show Hostname/IP in Device list'''&lt;br /&gt;
* '''Change dahdi''' – Sometimes this is used to change &amp;quot;Zap&amp;quot; to something else in GUI, e.g. to &amp;quot;PSTN&amp;quot;, mainly because not everybody knows what Zap stands for. PSTN is more common.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Registration ==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; Registration'''&lt;br /&gt;
&lt;br /&gt;
* '''Enabled?''' – do we want to let users [[Online registration | register online]] automatically?&lt;br /&gt;
* '''Hide registration link in Login page?''' – tick this option if you do not want users to be able to register online.&lt;br /&gt;
* '''Default country'''&lt;br /&gt;
* '''Asterisk server IP''' – what IP should user connect his softphone/server to?&lt;br /&gt;
* '''Send Email to User after registration''' – just yes or no.&lt;br /&gt;
* '''Send Email to Admin after registration''' – just yes or no.&lt;br /&gt;
* '''Send Email To User after User was created''' – just yes or no.&lt;br /&gt;
* '''Send Email To Admin after User was created''' – just yes or no.&lt;br /&gt;
* '''[[ReCAPTCHA]] configuration'''&lt;br /&gt;
* '''[[User_Agreement|Terms and conditions]]'''&lt;br /&gt;
* '''Allow to create user and device with matching username and password''' – just yes or no. If this setting is not enabled - username and password from MOR GUI will have to be different than device's username and password.&lt;br /&gt;
* '''Enable VAT checking for EU companies''' – you can choose whether to check '''TAX Registration Number:''' during the [[Online registration]] or not. Done over [http://ec.europa.eu/taxation_customs/vies/?locale=lt EU page].&lt;br /&gt;
* '''Allow blank VAT for EU companies''' – allows to leave blank '''TAX Registration Number:''' field during the [[Online registration]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
===See also===&lt;br /&gt;
&lt;br /&gt;
* [[Default user]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Invoices ==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; Invoices'''&lt;br /&gt;
&lt;br /&gt;
Invoice configuration is divided into '''Prepaid''' and '''Postpaid'''. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Settings ===&lt;br /&gt;
&lt;br /&gt;
* '''Number start''' – how the invoice number should start.&lt;br /&gt;
* '''Number length''' – the length in digits AFTER Number Start – e.g. Number Start is not counted into this length. This value is active only for first number type.&lt;br /&gt;
* '''Number type''' – select more appropriate number format.&lt;br /&gt;
* '''Invoice period start''' – when invoices are issued, default is first day of the month.&lt;br /&gt;
* '''Show calls in detailed invoice''' – yes or no.&lt;br /&gt;
* '''[[Outstanding balance(Debt) | Show balance line]]''' – shows balance line in Invoice PDF files when Invoice is generated from first day of month till last one. &lt;br /&gt;
* '''Round finals to 2 decimals''' – round or not total in Invoices to 2 decimals.&lt;br /&gt;
* '''Use short file name'''&lt;br /&gt;
* '''Group Subscriptions''' - User's subscriptions will be grouped by service (only applies to PDF and XLSX invoice).&lt;br /&gt;
* '''Show Quantity''' - Show quantity of each service (only applies to PDF invoice).&lt;br /&gt;
* '''Invoice Page Limit:''' – invoice will be generated till this page limit. Additional page is added with an explanation that page limit was reached. &lt;br /&gt;
* ''' Rename 'DID owner cost' label in detailed PDF invoice:''' – text which will be used instead of '''DID owner cost''' in detailed PDF invoice.&lt;br /&gt;
* ''' Hide 'DID owner cost' line in detailed PDF invoice:''' – checkbox, which control whether or not DID owner cost should be shown in detailed PDF invoice.&lt;br /&gt;
* ''' Show Destination with Prefix in Detailed Invoice:''' - checkbox, if enabled, destination will be shown as '''Destination Name (prefix)'''.&lt;br /&gt;
* ''' Rename red 'INVOICE' label in Simplified PDF Invoice:''' &lt;br /&gt;
* ''' Rename red 'INVOICE' label in Detailed PDF Invoice:'''&lt;br /&gt;
* ''' Rename red 'INVOICE' label in PDF Invoice by CallerID:'''&lt;br /&gt;
* ''' Use rounded Invoice Details Prices to calculate Totals''' - use rounded sub-totals to calculate Invoice Total price. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Details ===&lt;br /&gt;
&lt;br /&gt;
* '''Address format''' – changes field positioning in the invoice for the address. You must select it in order to show address in the invoice. &lt;br /&gt;
* '''Address line 1-4''' – address info.&lt;br /&gt;
* '''Bank details line 1-5''' – bank details info.&lt;br /&gt;
* '''Invoice balance line''' – line for balance (e.g. &amp;quot;Your current balance is&amp;quot;)&lt;br /&gt;
* '''Invoice to pay Line'''&lt;br /&gt;
* '''End title''' – a title for the end of your invoice.&lt;br /&gt;
&amp;lt;!---This functionality is available from MOR 12---&amp;gt;&lt;br /&gt;
* '''Add Average rate in detailed invoice''' – adds average rate in detailed invoice.&lt;br /&gt;
* '''Show Time in Minute''' – shows time in mm:ss instead of hh:mm:ss, for example, not 02:13:42 but 133:42.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Additional ===&lt;br /&gt;
&lt;br /&gt;
* '''Show additional details on separate page''' – enables additional custom page at the end of the invoice.&lt;br /&gt;
* '''Additional details''' – the information to be displayed in a custom page at the end of the invoice.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Functionality ===&lt;br /&gt;
&lt;br /&gt;
* '''Invoice allow recalculate after send''' – allows recalculating invoices after being sent. This setting also allows to delete sent invoices.&lt;br /&gt;
* '''Do not generate Invoices for blocked Users''' - if enabled Invoices will not be generated for blocked Users.&lt;br /&gt;
* '''Rename &amp;quot;Calls&amp;quot; label''' - changes 'Calls' name for Simplified Invoices and new Invoice XLSX. If you want to apply new 'Calls' name for old XLSX, you should go to Settings &amp;gt; Invoices &amp;gt; XLSX and mark 'New XLSX template apply for old Invoices'&lt;br /&gt;
* '''Start value for Invoice numbers''' - defines number from which Invoices numeration should start.&lt;br /&gt;
* '''Duration Format:''' - time format in invoice. This setting applies for XLSX type invoices (and PDF invoices generated from XLSX invoice) and Invoice Details page. Available options - 'H:M:S', 'H:M', 'M'. When option 'M' is used, sub option Decimal places appear, where you can select precision.&lt;br /&gt;
* '''Invoice Group By: Prefix / Destination'''&lt;br /&gt;
* '''Show Rates:No / Yes'''&lt;br /&gt;
* '''Show Calls in CID Invoice (CSV)''' - if enabled, then CSV Invoice by CallerID will show a list of calls.&lt;br /&gt;
* '''Show Subscriptions total Selfcost in Invoices List CSV''' - enables additional columns at the Invoice List, when using Export to CSV: Agreement Number, Issue date, Subscriptions total Selfcost. Columns are enabled for Admin and Resellers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XLSX ===&lt;br /&gt;
* '''XLSX Template''' - choose XLSX Template for Invoices.&lt;br /&gt;
* '''Send XLSX Invoices converted to PDF''' – If enabled XLSX invoices will be converted to PDF before sending over [[Invoices#Send_invoices_by_email_.28manual.29|Email]] or [[Cron_actions#Generate_Invoices_and_send_by_Email|using cron action]]&lt;br /&gt;
* '''Group regular Calls by Destination''' - Groups regular Calls be destination&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===See also===&lt;br /&gt;
&lt;br /&gt;
* [[Invoices]]&lt;br /&gt;
* [[Invoice configuration]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emails ==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; Emails'''&lt;br /&gt;
&lt;br /&gt;
* ''' 	Sending globally enabled''' – if this is checked, you will be able to use Mass Mailing and the system will send emails upon user registration.&lt;br /&gt;
* ''' 	Add recipient first name and last name''' – if this is checked, it will show the user's first name and last name if they are entered in the User Settings.&lt;br /&gt;
* '''SMTP server''' – hostname of the server.&lt;br /&gt;
* '''Port''' – port of SMTP server.&lt;br /&gt;
* '''Login''' – username to your SMTP server.&lt;br /&gt;
* '''Password''' – password to your SMTP server.&lt;br /&gt;
* '''Batch size''' – value for Mass Mailing, or how many emails to send at once.&lt;br /&gt;
* '''From''' – email address to put into From: field in email. Acceptable formats are: '''example@email.com''' or '''John Smith &amp;lt;example@email.com&amp;gt;'''.&lt;br /&gt;
* '''Test email sending''' – save settings and press this to test email sending. Do not forget to save settings first!&lt;br /&gt;
* '''TLS''' – '''Auto''', '''Yes''' or '''No'''. Default '''Auto'''.&lt;br /&gt;
&lt;br /&gt;
'''P.S. Remember to set admin's e-mail in admin's personal settings. Without this test email sending will not work!'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
===See also===&lt;br /&gt;
&lt;br /&gt;
* [[Emails|Mass Emails]]&lt;br /&gt;
* [[Email variables]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Various ==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; Various'''&lt;br /&gt;
&lt;br /&gt;
* '''Allow login by email''' - allow users to log in by email instead of a username.&lt;br /&gt;
* '''Logout link''' – a user will be redirected to this link after pressing &amp;quot;Logout&amp;quot;&lt;br /&gt;
* '''Agreement number length''' – number length in digits.&lt;br /&gt;
* '''Google Maps API key''' - the setting is necessary for using the Google Maps functionality. For more on how to configure this key please check [[Get Google Maps key]].&lt;br /&gt;
* '''Chanspy is disabled globally'''&lt;br /&gt;
*'''Send Recordings space warning Email''' - sends Email to Admin once a day if recordings exceed space limit.&lt;br /&gt;
*'''Delete Tariff Jobs older than''' - deletes tariff jobs older than set days.&lt;br /&gt;
*'''Delete Automatic Tariff Import Inbox Messages older than''' - deletes automatic tariff import inbox messages older than set days.&lt;br /&gt;
* '''Server free space limit''' – indicator when system should inform admin about low [[Multi_Server_support|Server]] space. By default 20%. Notice will appear in [[Integrity Check]] and every hour will send an email &amp;quot;Low Disk Space Alert&amp;quot;. Which template can be found and edited on [[Emails]] page. Information about the Server and the remaining free space will be provided.&lt;br /&gt;
* '''Days for DID to close''' – how long to keep DID closed before making it free.&lt;br /&gt;
* '''DID for Unassigned DID''' - this feature is used for calls coming from providers to system DIDs. Allows redirecting call to specific DID if client dials nonexistent DID. If empty, then this feature is disabled and a call will be terminated with [http://wiki.kolmisoft.com/index.php/207_Not_clear_who_should_receive_call 207 Not clear who should receive call] hangup code.&lt;br /&gt;
* '''Play IVR for unauthenticated call'''&lt;br /&gt;
* '''Banned CLIs default IVR''' – default IVR to route banned numbers.&lt;br /&gt;
* '''Default Music On Hold''' - allows to select Default Music On Hold.&lt;br /&gt;
* '''Use Extension in CallerID for Local Calls''' - overwrites original CallerID with Device Extension when making local calls. Outside calls are not affected by this setting.&lt;br /&gt;
* '''Call Forwarding CallerID (via call)''' - allows to manage CallerID when [http://wiki.kolmisoft.com/index.php/Call_Flow#Change_Forward_action_by_Call forwarding is set by call].&lt;br /&gt;
* '''Force Users to use forwarding CallerID (via GUI)''' – possible options: '''Empty''' (the user will have all options available), '''From Device, Same as comes, Sames as comes - with Diversion'''.&lt;br /&gt;
** When forwarding with Diversion, Diversion header can be customized by changing the value in the input field. For example value '''${MOR_SIP_TO};reason=unconditional''' will result in Diversion header with an additional parameter ''';reason=unconditional''' (here '''${MOR_SIP_TO}''' will be expanded to initial SIP To URI &amp;lt;nowiki&amp;gt;&amp;lt;sip:xxxxxx&amp;gt;&amp;lt;/nowiki&amp;gt;). If no value is set, then the default value '''${MOR_SIP_TO}''' (initial SIP To URI) will be used. Other Asterisk/MOR core variables can be used here as well..&lt;br /&gt;
* '''Enable &amp;quot;Allowed addresses&amp;quot; option for Providers:''' – allows Allowed Addresses functionality in Providers settings.&lt;br /&gt;
*'''Allow forward from Resellers''' - enables advanced device option: Allow forward from Resellers. More information about option in [https://wiki.kolmisoft.com/index.php/Device_settings#Advanced device settings].&lt;br /&gt;
&lt;br /&gt;
== Tax ==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; Tax'''&lt;br /&gt;
&lt;br /&gt;
Settings are explained here: [[Multi-Tax system]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Backups ==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; Backups'''&lt;br /&gt;
&lt;br /&gt;
Configuration is explained here: [[Backup system]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; API'''&lt;br /&gt;
&lt;br /&gt;
* '''Allow API''' – enable/disable API.&lt;br /&gt;
* '''Allow GET API''' – enable/disable GET in API - use only for testing!&lt;br /&gt;
* '''API Secret Key''' – secret key for API. This will be used as a password for signing queries to the MOR API. Check [[MOR_API | MOR API documentation]] for more information&lt;br /&gt;
* '''XML API Extension''' – .NET does not follow standards (surprise!); enable this setting if you are using it to get XML starting with HTTP tags.&lt;br /&gt;
* '''Allow API Login Redirect''' – enable/disable&lt;br /&gt;
* '''API allow registration''' – enable/disable registration through API&lt;br /&gt;
* '''API allow Payments''' – enable/disable payments through API&lt;br /&gt;
* '''API Payment confirmation''' – enable/disable payments confirmation through API&lt;br /&gt;
* '''[[Balance_in_phone|Allow devices to check balance over HTTP]]''' – enable/disable device balance checking&lt;br /&gt;
* '''[[MOR_API_rate_get|Allow devices to check rate over HTTP]]''' – enable/disable device rate checking&lt;br /&gt;
* '''Disable hash checking''' – lets you skip hash parameter using API&lt;br /&gt;
* '''Uniquehash''' – shows your uniquehash &lt;br /&gt;
* '''Send Email To Admin after API/Manual Payment''' - sends an email to Admin after API/Manual payment. Email Template name:  manual_payment_email &lt;br /&gt;
* '''Send Email to User after API/Manual Payment''' - sends an email to the user after API/Manual payment. Email Template name:  manual_payment_email_for_user &lt;br /&gt;
* '''Send Email To Admin after API/Balance Update''' - sends an email to Admin after API/Balance Update. Email Template name:  balance_update_email &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
'''Restrict API access by IP'''&amp;lt;br&amp;gt;&lt;br /&gt;
When this option is enabled together with '''Allow API globally''', the system accepts [[MOR API]] and [[MOR API v2]] requests only from IPv4 client addresses that have '''Allow API access''' enabled on [[Whitelisted IPs]] (GUI whitelist or IP authenticated Device or Provider table). Default is '''off''', which keeps the previous behavior (any client IP is allowed, subject to normal API settings and permissions).&lt;br /&gt;
&lt;br /&gt;
If you enable restriction while '''no''' Whitelisted IP has '''Allow API access''' checked, the API tab shows a warning that API calls may be denied until you configure at least one allowed IP on [[Whitelisted IPs]].&lt;br /&gt;
&lt;br /&gt;
Turning '''Allow API globally''' off also clears '''Restrict API access by IP''' when settings are saved.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
===See also===&lt;br /&gt;
&lt;br /&gt;
* [[Whitelisted IPs]] — '''Allow API access''' per IP (both tables on that page)&lt;br /&gt;
* [[MOR API]] — legacy XML API&lt;br /&gt;
* [[MOR API v2]] — REST API&lt;br /&gt;
* [[Action log]] — optional logging of denied API attempts by IP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Functionality ==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; Functionality'''&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
===FAX===&lt;br /&gt;
&lt;br /&gt;
* '''Fax device enabled''' – enable/disable Fax device in MOR. When admin enables FAX, Functionality tab appears in Reseller's GUI configuration. He can then enable or disabled fax for his own users himself. &lt;br /&gt;
* '''Fax2Email From Sender''' – there is a field &amp;quot;From:&amp;quot; in an email form. When MOR sends Fax to Email, &amp;quot;Fax2Email From Sender&amp;quot; value is displayed in &amp;quot;From:&amp;quot; field.&lt;br /&gt;
* '''Allow Users to change FAX email''' - allow simple Users to add/remove/edit FAX emails in FAX Devices.&lt;br /&gt;
* '''Fax2Email Email Template''' - [[Emails|email template]] to be used for Fax2Email emails. &amp;quot;None&amp;quot; means the default Asterisk template.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===CSV===&lt;br /&gt;
&lt;br /&gt;
* '''CSV Column Separator''' – how columns are separated in imported/exported CSV files.&lt;br /&gt;
* '''CSV Decimal Separator''' – how decimal parts in numbers are separated in imported/exported CSV files.&lt;br /&gt;
* ''' Archive CSV file when size reaches''' – if CSV file reaches a certain size, the system will archive it to save time to download it (0 means to archive always)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
===Active Calls===&lt;br /&gt;
&lt;br /&gt;
* '''How many maximum [[Active_Calls|Active Calls]] to show in GUI''' – how many [[Active_Calls| Active Calls]] to show in GUI&lt;br /&gt;
* '''[[Active_Calls| Active Calls]] refresh interval''' – [[Active_Calls|Active Calls]] refresh interval in seconds&lt;br /&gt;
* '''Show [[Active_Calls|Active Calls]] for Users''' – tick if you want to allow users to see [[Active_Calls|Active Calls]]&lt;br /&gt;
* '''Show Servers in [[Active_Calls|Active Calls]]'''&lt;br /&gt;
* '''Show DIDs in [[Active_Calls|Active Calls]]'''&lt;br /&gt;
* '''Show localized Source in [[Active_Calls|Active Calls]]''' - if set, [[Active_Calls|Active Calls]] will show callerid number after localisations (if any) have been applied.&lt;br /&gt;
* '''Show Originators' Device IP in [[Active_Calls|Active Calls]]'''&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Last Calls===&lt;br /&gt;
&lt;br /&gt;
* '''Limit PDF size in Last Calls to''' - limits how many pages can be exported from Last Calls to PDF. It takes a lot of system resources to generate PDF files therefore this limit should be low enough to prevent high load on system.&lt;br /&gt;
* '''Show Device and its CallerID in Last Calls'''  – shows additional column in [[Last Calls]] page with Device and its CallerID information. Click to reach that Device settings page.&lt;br /&gt;
* '''Show DID User instead of DID Device User in Last Calls''' - if enabled, shows DID User in Last Calls User/Name column instead of DID Device User. This option is relevant when incoming Provider calls DID that belongs to User A and is assigned to User's B Trunk. If option is enabled, User A will be shown. If option is disabled, User B will be shown.&lt;br /&gt;
* '''Show Terminated by in Last Calls''' - show Terminated  By column in [[Last Calls]], calls CSV/PDF export, and adds the possibility to select this column in [[CDR Export Templates]].&lt;br /&gt;
* '''Show Usernames on PDF/CSV Export Files in Last Calls''' – if checked, when a particular User in the Last Calls page search is selected, the Last Calls PDF/CSV file name will be composed also of the Name of selected User. If you are looking for All Users, no User Name will be used. (Name of the User will be shown in Name of the CSV/PDF file).&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Tariffs/Rates===&lt;br /&gt;
&lt;br /&gt;
* '''Show rates for users''' – allows users to see rates&lt;br /&gt;
* '''Show rates without Tax''' – shows rates without TAX&lt;br /&gt;
* '''Show [[Advanced_Rates|Advanced Rates]] for users''' – allows users to see [[Advanced_Rates|Advanced Rates]]&lt;br /&gt;
* '''Show zero rates in LCR tariff export:''' – shows zero rates in LCR tariff exported file.&lt;br /&gt;
* '''Delete outdated Rates after''' - Delete outdated Rates after some dates.&lt;br /&gt;
* '''Show Ghost percent column in Tariffs:''' – if enabled, the Ghost percent column will be shown in the tariff. Default disabled.&lt;br /&gt;
NOTE: if [[Custom Rates]] and/or Tariff Rates are set for the user, only the custom rates will be shown in the details of destination rates. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Statement of Account===&lt;br /&gt;
* ''' PDF Settings ''' - allows to put Address lines of PDF file for Statement of Account.&lt;br /&gt;
*Address line 1: Street Address&lt;br /&gt;
*Address line 2: City, Country&lt;br /&gt;
*Address line 3: Phone, fax&lt;br /&gt;
*Address line 4: Web, email&lt;br /&gt;
*Bank details line 1&lt;br /&gt;
*Bank details line 2&lt;br /&gt;
*Bank details line 3&lt;br /&gt;
*Bank details line 4&lt;br /&gt;
*Bank details line 5&lt;br /&gt;
*Bank details line 6&lt;br /&gt;
*Bank details line 7&lt;br /&gt;
*Bank details line 8&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Privacy==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; Privacy'''&lt;br /&gt;
&lt;br /&gt;
* '''[[Privacy_to_hide_Destination_ends|Privacy to hide Destination ends]]'''&lt;br /&gt;
* '''[[GDPR]] Activated''' – hides User data with notification &amp;quot;Data hidden due GDPR. Press to show data (action will be logged)&amp;quot;. Valid for Admin, Accountant, Reseller and Partner.&lt;br /&gt;
&lt;br /&gt;
== Visual ==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; Visual'''&lt;br /&gt;
&lt;br /&gt;
* '''Items per page (Setting high value can cause performance issues)''' – the number of items to display per one page&lt;br /&gt;
* '''[[Global_date_format| Default date format]]''' – System default date format&lt;br /&gt;
* '''Default Time Format''' – System default time format&lt;br /&gt;
* '''Default Hour Format''' - System default hour format&lt;br /&gt;
* '''Default Number Decimal''' – with this option you can set default number decimal for all GUI&lt;br /&gt;
* '''Number digits''' – how many digits to display after a comma&lt;br /&gt;
* '''Hide Quick Stats in Start page''' – hide Quick stats from start page&lt;br /&gt;
* '''Hide &amp;quot;Information about this page&amp;quot; link''' – hide HELP banner in GUI&lt;br /&gt;
* '''Hide &amp;quot;I want to&amp;quot; help links'''&lt;br /&gt;
* '''[[Remove_Manual_link_from_admin_GUI|Hide &amp;quot;Manual&amp;quot; link]]''' – hides &amp;quot;Manual&amp;quot; link&lt;br /&gt;
*'''Hide Provider Payments from User Payment List''' - default off.&lt;br /&gt;
* '''Show Full Source (CallerID Name and Number)'''&lt;br /&gt;
* '''Use &amp;lt;&amp;gt; brackets in CDR export''' - changes brackets in CDR export&lt;br /&gt;
* '''Show only main page''' – this is a very advanced feature for those who want to hide default MOR menu tree on the left so that they could build their own menu using advanced techniques without modifying MOR GUI sources.&lt;br /&gt;
* '''Show forgot password''', because this functionality requires a unique email in the system. The setting can be unchecked if all emails are unique in the system. &lt;br /&gt;
** '''From Device''' - puts CallerID for the Device that is forwarding the call. If Device CallerID is empty, then the originator's CallerID will be used.&lt;br /&gt;
** '''Same as comes - unchanged''' - leaves the CallerID as it comes from the originator.&lt;br /&gt;
** '''Same as comes - with Diversion''' - leaves the CallerID as it comes from the original caller and additionally adds SIP header Diversion with CallerID from the Device that is forwarding the call (header will not be added if Device does not have CallerID set).&lt;br /&gt;
* '''Show forgot password''' – turns on '''[[MOR_forgot_user_password | Forgot password]]''' functionality.&lt;br /&gt;
* '''Show detailed Quick Stats''' - shows modified quick stats of first page.&lt;br /&gt;
* '''Show Replication Broken warning only for Admin''' - if enabled, shows Replication Broken warning message only for Admin account.&lt;br /&gt;
* '''Change LCR priority by using drag and drop'''&lt;br /&gt;
* '''New Menu Active''' - if enabled, changes main menu to the new structure.&lt;br /&gt;
* '''Dropdown field in User's subscriptions''' - enables old style Service selection in Subscription form.&lt;br /&gt;
* '''Show entered Destination only for Users''' - show the Destination numbers for Users that were entered by them and not Destination numbers after Localization.&lt;br /&gt;
* '''Show Company Name column in Users page''' - show &amp;quot;Company Name&amp;quot; column in Users list page.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Server load ==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; Server load'''&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Settings for GUI Server and Database Server&lt;br /&gt;
&lt;br /&gt;
* '''HDD utilisation higher than''' – Percentage of CPU time during which I/O requests were issued to the device (bandwidth utilization for the device).&lt;br /&gt;
* '''CPU General Load higher than''' – CPU General load higher than – Percentage of the CPU for user processes.&lt;br /&gt;
* '''CPU Load Stats 1 higher than''' – average load per one minute on the system&lt;br /&gt;
* '''CPU MySQL process higher than''' –  Percentage of the CPU for MySQL process&lt;br /&gt;
* '''CPU Ruby process higher than''' –  Percentage of the CPU for Ruby process&lt;br /&gt;
* '''CPU Asterisk process (if present) higher than''' – Percentage of the CPU for Asterisk process&lt;br /&gt;
* '''Delete Server Load Stats older than''' – deletes internal servers load statistics older than defined number of days.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Calls ==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; Calls'''&lt;br /&gt;
* '''Retrieve PCAP files from the Proxy Server''' – default off. Works only when CCL module is activated.&lt;br /&gt;
&amp;lt;!--- from X18---&amp;gt;&lt;br /&gt;
* '''SQL Max Execution Time''' - max execution time in seconds for SQL query. The default time is 300 seconds (5 minutes). Used in Statistics pages (Calls List export and similar).&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Archived calls]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FTP ==&lt;br /&gt;
Please fill up FTP server details if you want to store Archived calls or/and Backups to FTP server.&lt;br /&gt;
&lt;br /&gt;
* '''IP''' - Enter FTP server IP.&lt;br /&gt;
* '''Port''' - Enter FTP server Port.&lt;br /&gt;
* '''Username''' - Enter FTP server Username.&lt;br /&gt;
* '''Password''' - Enter FTP server Password.&lt;br /&gt;
* '''Path for Archived Calls''' - Enter Path for Archived Calls.&lt;br /&gt;
* '''Path for Backups''' - Enter path for Backups.&lt;br /&gt;
* '''Path for CDR Export''' - Enter path where to export CDRs.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SFTP ==&lt;br /&gt;
Please fill up SFTP server details if you want to use SFTP for [[Automatic CDR Export]].&lt;br /&gt;
&lt;br /&gt;
* '''IP''' - IP of the SFTP server.&lt;br /&gt;
* '''Port''' - Port of the SFTP server.&lt;br /&gt;
* '''Username''' - Username to connect to SFTP server.&lt;br /&gt;
* '''Password''' - Password to connect to SFTP server. &lt;br /&gt;
* '''Use SSH key''' - Use SSH key configured as described [[Configure SSH connection between servers|here]].&lt;br /&gt;
* '''Path for CDR Export''' - Path in SFTP server where to export CDRs.&lt;br /&gt;
* '''Skip CA verification''' - skips SFPT servers CA verification. Try to enable it if the test passes, but if the upload fails. Adds the --insecure option as described here https://curl.se/docs/sslcerts.html&lt;br /&gt;
* '''Path to CA Certificate''' - optional. Allows specifying a custom CA store. Adds the --cacert [file] option as described here https://curl.se/docs/sslcerts.html&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Security ==&lt;br /&gt;
* '''Allow short passwords in devices''' - by default, device passwords are expected to be longer than 7 characters. If enabled, MOR will permit shorter device passwords.&lt;br /&gt;
* '''Use strong passwords for users'''&lt;br /&gt;
* '''Admin login with approved IP only''' - security measure which allows to approve IP's that try to [[MOR_Login_with_approved_IP%27s|login with Admin Account]].&lt;br /&gt;
* '''Enable IP report warning on login failure''' - show [[MOR_Login_Failure_Report|warning]] on unsuccessful login attempts.&lt;br /&gt;
* '''Logout after password change''' - terminates all sessions of the User whose password is changed.&lt;br /&gt;
* '''Logout after closing browser window''' - terminates all sessions of the User after closing browser window.&lt;br /&gt;
* '''Do not logout on session IP change''' - do not logout from MOR GUI if IP is changed.&lt;br /&gt;
* '''2FA Enabled''' - Enables two factors authentication. Two factors authentication requires to enter emailed code during login to user account. '''2FA Enabled must be also enable on individual [[User_Details|User settings]] to make it work for that User.'''&lt;br /&gt;
** '''Email Template''' - [[Emails|email template]] used to send the code.&lt;br /&gt;
** '''Code length (digits)''' - code length.&lt;br /&gt;
** '''Code Enter Attempts Allowed''' - number of attempts to enter the code correctly. Code expires after this number of failed attempts.&lt;br /&gt;
** '''Code Enter Time Allowed''' - code is valid for this amount of time.&lt;br /&gt;
** '''Send Notification Email to Admin on Login''' - allows admin to get email notification on login.&lt;br /&gt;
*** '''Email Template''' - [[Emails|email template]] used to notify admin.&lt;br /&gt;
*** '''On Admin Login''' - get notification on login to Admin's account.&lt;br /&gt;
*** '''On User Login''' - get notification on login to User's accounts.&lt;br /&gt;
** '''Send Notification Email on Login''' - allows this mailbox to get email notification on login.&lt;br /&gt;
*** '''Email Template''' - [[Emails|email template]] used to notify.&lt;br /&gt;
*** '''On Admin Login''' - get notification on login to Admin's account.&lt;br /&gt;
*** '''On User Login''' - get notification on login to User's accounts.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=See also=&lt;br /&gt;
&lt;br /&gt;
* [[Server is overloaded]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=Configuration_from_GUI&amp;diff=31627</id>
		<title>Configuration from GUI</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=Configuration_from_GUI&amp;diff=31627"/>
		<updated>2026-06-02T16:29:43Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* API */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Where I can find this settings menu?=&lt;br /&gt;
&lt;br /&gt;
You can find this menu in '''SETTINGS –&amp;gt; Setup –&amp;gt; Settings'''&lt;br /&gt;
&lt;br /&gt;
[[File:Settings_path.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Global ==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; [[Global_Settings | Global]]'''&lt;br /&gt;
&lt;br /&gt;
* '''Company''' – name of the company.&lt;br /&gt;
* '''Company email''' – email address of the company.&lt;br /&gt;
* '''Version''' – version number.&lt;br /&gt;
* '''Copyright Title''' – copyright title supports html text format.&lt;br /&gt;
* '''Browser Title''' – browser title for MOR GUI.&lt;br /&gt;
* '''Front Page Text''' – some text to place on front page.&lt;br /&gt;
* '''Login Page Text''' – some text to place on login page&lt;br /&gt;
* '''Show logo on first page''' - untick to hide logo on the start page&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Users ==&lt;br /&gt;
&lt;br /&gt;
* '''Show Calls statistics to User for last''' – number of Calls statistics to show in days. For example, if you enter 5 days, users will only see 5 days old calls, they will not be able to check older calls.&lt;br /&gt;
* '''Show user_billsec for Users instead of billsec''' – shows user_billsec instead of billsec in Users invoices and last calls. Notice that Billsec shows real Call duration, user_billsec shows Call duration after minimal time or increment applied. For example, if user tariff has 60 sec minimal time and user made a Call for 20 sec, then billsec will show 20 sec and user_billsec will show 60 sec (minimal time is applied).&lt;br /&gt;
* '''Hide device passwords for users''' – do not display device passwords for users.&lt;br /&gt;
* ''' Hide Device username for Users'''  – do not display device username for users.&lt;br /&gt;
* '''Hide payment options for postpaid users''' - will hide the payment option for all postpaid users (including Resellers if they are postpaid).&lt;br /&gt;
* '''Hide non-completed payments for user''' – hides non-completed payments (the ones which are started in MOR, but are not completed in a payment gateway website).&lt;br /&gt;
* '''Hide Recordings for all users''' – hides recordings for all system users from menu and device settings.&lt;br /&gt;
* '''Allow User to assign DID to Device''' – lets User to assign DID to Device.&lt;br /&gt;
* '''Allow User to assign DID to Trunk''' – lets User to Assign DID to Trunk.&lt;br /&gt;
* '''Do not allow users to change their email addresses'''&lt;br /&gt;
* '''Do not allow users to change their Personal Details'''&lt;br /&gt;
* '''Change ANSWER to FAILED if HGC not equal to 16 for Users''' – changes the Hangupcause for users in call reports from Answered to Failed if Hangupcause is not 16.&lt;br /&gt;
* '''Do not allow PREPAID User balance drop below zero (block them instead)'''&lt;br /&gt;
* '''Do not block POSTPAID User when balance goes bellow zero on subscription count'''&lt;br /&gt;
* '''Allow identical email addresses to different Users''' – allows creating Users or registering users with identical email addresses. After checking this setting you will be not able to check.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Devices ==&lt;br /&gt;
&lt;br /&gt;
* '''Device PIN length''' – length for automatically generated PIN codes for devices.&lt;br /&gt;
* '''Device range MIN''' – from which extension automatic extension assigning starts.&lt;br /&gt;
* '''Device range MAX''' – till which extension automatic extension assigning goes.&lt;br /&gt;
** For example, from this interval: [Device range MIN, Device range MAX] MOR will select extensions for newly created Devices.&lt;br /&gt;
* '''Random Device Extension''' – when creating device, random number from '''Device Range''' will be taken.&lt;br /&gt;
* '''Enable &amp;quot;Allowed addresses&amp;quot; option for Devices:'''  – allows [[Device_settings#Allowed_Addresses | Allowed Addresses]] functionality in Devices settings.&lt;br /&gt;
* '''Do not allow duplicate device user names'''&lt;br /&gt;
* '''Inform when Devices are created or updated''' – check to get an email about every newly created or updated Device.&lt;br /&gt;
* '''Allow same IP and Port combinations in multiple Devices''' – allows creating Devices with the same IP and Port combination.&lt;br /&gt;
* '''Show Hostname/IP in Device list'''&lt;br /&gt;
* '''Change dahdi''' – Sometimes this is used to change &amp;quot;Zap&amp;quot; to something else in GUI, e.g. to &amp;quot;PSTN&amp;quot;, mainly because not everybody knows what Zap stands for. PSTN is more common.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Registration ==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; Registration'''&lt;br /&gt;
&lt;br /&gt;
* '''Enabled?''' – do we want to let users [[Online registration | register online]] automatically?&lt;br /&gt;
* '''Hide registration link in Login page?''' – tick this option if you do not want users to be able to register online.&lt;br /&gt;
* '''Default country'''&lt;br /&gt;
* '''Asterisk server IP''' – what IP should user connect his softphone/server to?&lt;br /&gt;
* '''Send Email to User after registration''' – just yes or no.&lt;br /&gt;
* '''Send Email to Admin after registration''' – just yes or no.&lt;br /&gt;
* '''Send Email To User after User was created''' – just yes or no.&lt;br /&gt;
* '''Send Email To Admin after User was created''' – just yes or no.&lt;br /&gt;
* '''[[ReCAPTCHA]] configuration'''&lt;br /&gt;
* '''[[User_Agreement|Terms and conditions]]'''&lt;br /&gt;
* '''Allow to create user and device with matching username and password''' – just yes or no. If this setting is not enabled - username and password from MOR GUI will have to be different than device's username and password.&lt;br /&gt;
* '''Enable VAT checking for EU companies''' – you can choose whether to check '''TAX Registration Number:''' during the [[Online registration]] or not. Done over [http://ec.europa.eu/taxation_customs/vies/?locale=lt EU page].&lt;br /&gt;
* '''Allow blank VAT for EU companies''' – allows to leave blank '''TAX Registration Number:''' field during the [[Online registration]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
===See also===&lt;br /&gt;
&lt;br /&gt;
* [[Default user]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Invoices ==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; Invoices'''&lt;br /&gt;
&lt;br /&gt;
Invoice configuration is divided into '''Prepaid''' and '''Postpaid'''. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Settings ===&lt;br /&gt;
&lt;br /&gt;
* '''Number start''' – how the invoice number should start.&lt;br /&gt;
* '''Number length''' – the length in digits AFTER Number Start – e.g. Number Start is not counted into this length. This value is active only for first number type.&lt;br /&gt;
* '''Number type''' – select more appropriate number format.&lt;br /&gt;
* '''Invoice period start''' – when invoices are issued, default is first day of the month.&lt;br /&gt;
* '''Show calls in detailed invoice''' – yes or no.&lt;br /&gt;
* '''[[Outstanding balance(Debt) | Show balance line]]''' – shows balance line in Invoice PDF files when Invoice is generated from first day of month till last one. &lt;br /&gt;
* '''Round finals to 2 decimals''' – round or not total in Invoices to 2 decimals.&lt;br /&gt;
* '''Use short file name'''&lt;br /&gt;
* '''Group Subscriptions''' - User's subscriptions will be grouped by service (only applies to PDF and XLSX invoice).&lt;br /&gt;
* '''Show Quantity''' - Show quantity of each service (only applies to PDF invoice).&lt;br /&gt;
* '''Invoice Page Limit:''' – invoice will be generated till this page limit. Additional page is added with an explanation that page limit was reached. &lt;br /&gt;
* ''' Rename 'DID owner cost' label in detailed PDF invoice:''' – text which will be used instead of '''DID owner cost''' in detailed PDF invoice.&lt;br /&gt;
* ''' Hide 'DID owner cost' line in detailed PDF invoice:''' – checkbox, which control whether or not DID owner cost should be shown in detailed PDF invoice.&lt;br /&gt;
* ''' Show Destination with Prefix in Detailed Invoice:''' - checkbox, if enabled, destination will be shown as '''Destination Name (prefix)'''.&lt;br /&gt;
* ''' Rename red 'INVOICE' label in Simplified PDF Invoice:''' &lt;br /&gt;
* ''' Rename red 'INVOICE' label in Detailed PDF Invoice:'''&lt;br /&gt;
* ''' Rename red 'INVOICE' label in PDF Invoice by CallerID:'''&lt;br /&gt;
* ''' Use rounded Invoice Details Prices to calculate Totals''' - use rounded sub-totals to calculate Invoice Total price. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Details ===&lt;br /&gt;
&lt;br /&gt;
* '''Address format''' – changes field positioning in the invoice for the address. You must select it in order to show address in the invoice. &lt;br /&gt;
* '''Address line 1-4''' – address info.&lt;br /&gt;
* '''Bank details line 1-5''' – bank details info.&lt;br /&gt;
* '''Invoice balance line''' – line for balance (e.g. &amp;quot;Your current balance is&amp;quot;)&lt;br /&gt;
* '''Invoice to pay Line'''&lt;br /&gt;
* '''End title''' – a title for the end of your invoice.&lt;br /&gt;
&amp;lt;!---This functionality is available from MOR 12---&amp;gt;&lt;br /&gt;
* '''Add Average rate in detailed invoice''' – adds average rate in detailed invoice.&lt;br /&gt;
* '''Show Time in Minute''' – shows time in mm:ss instead of hh:mm:ss, for example, not 02:13:42 but 133:42.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Additional ===&lt;br /&gt;
&lt;br /&gt;
* '''Show additional details on separate page''' – enables additional custom page at the end of the invoice.&lt;br /&gt;
* '''Additional details''' – the information to be displayed in a custom page at the end of the invoice.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Functionality ===&lt;br /&gt;
&lt;br /&gt;
* '''Invoice allow recalculate after send''' – allows recalculating invoices after being sent. This setting also allows to delete sent invoices.&lt;br /&gt;
* '''Do not generate Invoices for blocked Users''' - if enabled Invoices will not be generated for blocked Users.&lt;br /&gt;
* '''Rename &amp;quot;Calls&amp;quot; label''' - changes 'Calls' name for Simplified Invoices and new Invoice XLSX. If you want to apply new 'Calls' name for old XLSX, you should go to Settings &amp;gt; Invoices &amp;gt; XLSX and mark 'New XLSX template apply for old Invoices'&lt;br /&gt;
* '''Start value for Invoice numbers''' - defines number from which Invoices numeration should start.&lt;br /&gt;
* '''Duration Format:''' - time format in invoice. This setting applies for XLSX type invoices (and PDF invoices generated from XLSX invoice) and Invoice Details page. Available options - 'H:M:S', 'H:M', 'M'. When option 'M' is used, sub option Decimal places appear, where you can select precision.&lt;br /&gt;
* '''Invoice Group By: Prefix / Destination'''&lt;br /&gt;
* '''Show Rates:No / Yes'''&lt;br /&gt;
* '''Show Calls in CID Invoice (CSV)''' - if enabled, then CSV Invoice by CallerID will show a list of calls.&lt;br /&gt;
* '''Show Subscriptions total Selfcost in Invoices List CSV''' - enables additional columns at the Invoice List, when using Export to CSV: Agreement Number, Issue date, Subscriptions total Selfcost. Columns are enabled for Admin and Resellers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== XLSX ===&lt;br /&gt;
* '''XLSX Template''' - choose XLSX Template for Invoices.&lt;br /&gt;
* '''Send XLSX Invoices converted to PDF''' – If enabled XLSX invoices will be converted to PDF before sending over [[Invoices#Send_invoices_by_email_.28manual.29|Email]] or [[Cron_actions#Generate_Invoices_and_send_by_Email|using cron action]]&lt;br /&gt;
* '''Group regular Calls by Destination''' - Groups regular Calls be destination&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===See also===&lt;br /&gt;
&lt;br /&gt;
* [[Invoices]]&lt;br /&gt;
* [[Invoice configuration]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Emails ==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; Emails'''&lt;br /&gt;
&lt;br /&gt;
* ''' 	Sending globally enabled''' – if this is checked, you will be able to use Mass Mailing and the system will send emails upon user registration.&lt;br /&gt;
* ''' 	Add recipient first name and last name''' – if this is checked, it will show the user's first name and last name if they are entered in the User Settings.&lt;br /&gt;
* '''SMTP server''' – hostname of the server.&lt;br /&gt;
* '''Port''' – port of SMTP server.&lt;br /&gt;
* '''Login''' – username to your SMTP server.&lt;br /&gt;
* '''Password''' – password to your SMTP server.&lt;br /&gt;
* '''Batch size''' – value for Mass Mailing, or how many emails to send at once.&lt;br /&gt;
* '''From''' – email address to put into From: field in email. Acceptable formats are: '''example@email.com''' or '''John Smith &amp;lt;example@email.com&amp;gt;'''.&lt;br /&gt;
* '''Test email sending''' – save settings and press this to test email sending. Do not forget to save settings first!&lt;br /&gt;
* '''TLS''' – '''Auto''', '''Yes''' or '''No'''. Default '''Auto'''.&lt;br /&gt;
&lt;br /&gt;
'''P.S. Remember to set admin's e-mail in admin's personal settings. Without this test email sending will not work!'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
===See also===&lt;br /&gt;
&lt;br /&gt;
* [[Emails|Mass Emails]]&lt;br /&gt;
* [[Email variables]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Various ==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; Various'''&lt;br /&gt;
&lt;br /&gt;
* '''Allow login by email''' - allow users to log in by email instead of a username.&lt;br /&gt;
* '''Logout link''' – a user will be redirected to this link after pressing &amp;quot;Logout&amp;quot;&lt;br /&gt;
* '''Agreement number length''' – number length in digits.&lt;br /&gt;
* '''Google Maps API key''' - the setting is necessary for using the Google Maps functionality. For more on how to configure this key please check [[Get Google Maps key]].&lt;br /&gt;
* '''Chanspy is disabled globally'''&lt;br /&gt;
*'''Send Recordings space warning Email''' - sends Email to Admin once a day if recordings exceed space limit.&lt;br /&gt;
*'''Delete Tariff Jobs older than''' - deletes tariff jobs older than set days.&lt;br /&gt;
*'''Delete Automatic Tariff Import Inbox Messages older than''' - deletes automatic tariff import inbox messages older than set days.&lt;br /&gt;
* '''Server free space limit''' – indicator when system should inform admin about low [[Multi_Server_support|Server]] space. By default 20%. Notice will appear in [[Integrity Check]] and every hour will send an email &amp;quot;Low Disk Space Alert&amp;quot;. Which template can be found and edited on [[Emails]] page. Information about the Server and the remaining free space will be provided.&lt;br /&gt;
* '''Days for DID to close''' – how long to keep DID closed before making it free.&lt;br /&gt;
* '''DID for Unassigned DID''' - this feature is used for calls coming from providers to system DIDs. Allows redirecting call to specific DID if client dials nonexistent DID. If empty, then this feature is disabled and a call will be terminated with [http://wiki.kolmisoft.com/index.php/207_Not_clear_who_should_receive_call 207 Not clear who should receive call] hangup code.&lt;br /&gt;
* '''Play IVR for unauthenticated call'''&lt;br /&gt;
* '''Banned CLIs default IVR''' – default IVR to route banned numbers.&lt;br /&gt;
* '''Default Music On Hold''' - allows to select Default Music On Hold.&lt;br /&gt;
* '''Use Extension in CallerID for Local Calls''' - overwrites original CallerID with Device Extension when making local calls. Outside calls are not affected by this setting.&lt;br /&gt;
* '''Call Forwarding CallerID (via call)''' - allows to manage CallerID when [http://wiki.kolmisoft.com/index.php/Call_Flow#Change_Forward_action_by_Call forwarding is set by call].&lt;br /&gt;
* '''Force Users to use forwarding CallerID (via GUI)''' – possible options: '''Empty''' (the user will have all options available), '''From Device, Same as comes, Sames as comes - with Diversion'''.&lt;br /&gt;
** When forwarding with Diversion, Diversion header can be customized by changing the value in the input field. For example value '''${MOR_SIP_TO};reason=unconditional''' will result in Diversion header with an additional parameter ''';reason=unconditional''' (here '''${MOR_SIP_TO}''' will be expanded to initial SIP To URI &amp;lt;nowiki&amp;gt;&amp;lt;sip:xxxxxx&amp;gt;&amp;lt;/nowiki&amp;gt;). If no value is set, then the default value '''${MOR_SIP_TO}''' (initial SIP To URI) will be used. Other Asterisk/MOR core variables can be used here as well..&lt;br /&gt;
* '''Enable &amp;quot;Allowed addresses&amp;quot; option for Providers:''' – allows Allowed Addresses functionality in Providers settings.&lt;br /&gt;
*'''Allow forward from Resellers''' - enables advanced device option: Allow forward from Resellers. More information about option in [https://wiki.kolmisoft.com/index.php/Device_settings#Advanced device settings].&lt;br /&gt;
&lt;br /&gt;
== Tax ==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; Tax'''&lt;br /&gt;
&lt;br /&gt;
Settings are explained here: [[Multi-Tax system]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Backups ==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; Backups'''&lt;br /&gt;
&lt;br /&gt;
Configuration is explained here: [[Backup system]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; API'''&lt;br /&gt;
&lt;br /&gt;
* '''Allow API''' – enable/disable API.&lt;br /&gt;
* '''Allow GET API''' – enable/disable GET in API - use only for testing!&lt;br /&gt;
* '''API Secret Key''' – secret key for API. This will be used as a password for signing queries to the MOR API. Check [[MOR_API | MOR API documentation]] for more information&lt;br /&gt;
* '''XML API Extension''' – .NET does not follow standards (surprise!); enable this setting if you are using it to get XML starting with HTTP tags.&lt;br /&gt;
* '''Allow API Login Redirect''' – enable/disable&lt;br /&gt;
* '''API allow registration''' – enable/disable registration through API&lt;br /&gt;
* '''API allow Payments''' – enable/disable payments through API&lt;br /&gt;
* '''API Payment confirmation''' – enable/disable payments confirmation through API&lt;br /&gt;
* '''[[Balance_in_phone|Allow devices to check balance over HTTP]]''' – enable/disable device balance checking&lt;br /&gt;
* '''[[MOR_API_rate_get|Allow devices to check rate over HTTP]]''' – enable/disable device rate checking&lt;br /&gt;
* '''Disable hash checking''' – lets you skip hash parameter using API&lt;br /&gt;
* '''Uniquehash''' – shows your uniquehash &lt;br /&gt;
* '''Send Email To Admin after API/Manual Payment''' - sends an email to Admin after API/Manual payment. Email Template name:  manual_payment_email &lt;br /&gt;
* '''Send Email to User after API/Manual Payment''' - sends an email to the user after API/Manual payment. Email Template name:  manual_payment_email_for_user &lt;br /&gt;
* '''Send Email To Admin after API/Balance Update''' - sends an email to Admin after API/Balance Update. Email Template name:  balance_update_email &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Restrict API access by IP'''&amp;lt;br&amp;gt;&lt;br /&gt;
When this option is enabled together with '''Allow API globally''', the system accepts [[MOR API]] and [[MOR API v2]] requests only from IPv4 client addresses that have '''Allow API access''' enabled on [[Whitelisted IPs]] (GUI whitelist or IP authenticated Device or Provider table). Default is '''off''', which keeps the previous behavior (any client IP is allowed, subject to normal API settings and permissions).&lt;br /&gt;
&lt;br /&gt;
If you enable restriction while '''no''' Whitelisted IP has '''Allow API access''' checked, the API tab shows a warning that API calls may be denied until you configure at least one allowed IP on [[Whitelisted IPs]].&lt;br /&gt;
&lt;br /&gt;
Turning '''Allow API globally''' off also clears '''Restrict API access by IP''' when settings are saved.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
===See also===&lt;br /&gt;
&lt;br /&gt;
* [[Whitelisted IPs]] — '''Allow API access''' per IP (both tables on that page)&lt;br /&gt;
* [[MOR API]] — legacy XML API&lt;br /&gt;
* [[MOR API v2]] — REST API&lt;br /&gt;
* [[Action log]] — optional logging of denied API attempts by IP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Functionality ==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; Functionality'''&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
===FAX===&lt;br /&gt;
&lt;br /&gt;
* '''Fax device enabled''' – enable/disable Fax device in MOR. When admin enables FAX, Functionality tab appears in Reseller's GUI configuration. He can then enable or disabled fax for his own users himself. &lt;br /&gt;
* '''Fax2Email From Sender''' – there is a field &amp;quot;From:&amp;quot; in an email form. When MOR sends Fax to Email, &amp;quot;Fax2Email From Sender&amp;quot; value is displayed in &amp;quot;From:&amp;quot; field.&lt;br /&gt;
* '''Allow Users to change FAX email''' - allow simple Users to add/remove/edit FAX emails in FAX Devices.&lt;br /&gt;
* '''Fax2Email Email Template''' - [[Emails|email template]] to be used for Fax2Email emails. &amp;quot;None&amp;quot; means the default Asterisk template.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===CSV===&lt;br /&gt;
&lt;br /&gt;
* '''CSV Column Separator''' – how columns are separated in imported/exported CSV files.&lt;br /&gt;
* '''CSV Decimal Separator''' – how decimal parts in numbers are separated in imported/exported CSV files.&lt;br /&gt;
* ''' Archive CSV file when size reaches''' – if CSV file reaches a certain size, the system will archive it to save time to download it (0 means to archive always)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
===Active Calls===&lt;br /&gt;
&lt;br /&gt;
* '''How many maximum [[Active_Calls|Active Calls]] to show in GUI''' – how many [[Active_Calls| Active Calls]] to show in GUI&lt;br /&gt;
* '''[[Active_Calls| Active Calls]] refresh interval''' – [[Active_Calls|Active Calls]] refresh interval in seconds&lt;br /&gt;
* '''Show [[Active_Calls|Active Calls]] for Users''' – tick if you want to allow users to see [[Active_Calls|Active Calls]]&lt;br /&gt;
* '''Show Servers in [[Active_Calls|Active Calls]]'''&lt;br /&gt;
* '''Show DIDs in [[Active_Calls|Active Calls]]'''&lt;br /&gt;
* '''Show localized Source in [[Active_Calls|Active Calls]]''' - if set, [[Active_Calls|Active Calls]] will show callerid number after localisations (if any) have been applied.&lt;br /&gt;
* '''Show Originators' Device IP in [[Active_Calls|Active Calls]]'''&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Last Calls===&lt;br /&gt;
&lt;br /&gt;
* '''Limit PDF size in Last Calls to''' - limits how many pages can be exported from Last Calls to PDF. It takes a lot of system resources to generate PDF files therefore this limit should be low enough to prevent high load on system.&lt;br /&gt;
* '''Show Device and its CallerID in Last Calls'''  – shows additional column in [[Last Calls]] page with Device and its CallerID information. Click to reach that Device settings page.&lt;br /&gt;
* '''Show DID User instead of DID Device User in Last Calls''' - if enabled, shows DID User in Last Calls User/Name column instead of DID Device User. This option is relevant when incoming Provider calls DID that belongs to User A and is assigned to User's B Trunk. If option is enabled, User A will be shown. If option is disabled, User B will be shown.&lt;br /&gt;
* '''Show Terminated by in Last Calls''' - show Terminated  By column in [[Last Calls]], calls CSV/PDF export, and adds the possibility to select this column in [[CDR Export Templates]].&lt;br /&gt;
* '''Show Usernames on PDF/CSV Export Files in Last Calls''' – if checked, when a particular User in the Last Calls page search is selected, the Last Calls PDF/CSV file name will be composed also of the Name of selected User. If you are looking for All Users, no User Name will be used. (Name of the User will be shown in Name of the CSV/PDF file).&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Tariffs/Rates===&lt;br /&gt;
&lt;br /&gt;
* '''Show rates for users''' – allows users to see rates&lt;br /&gt;
* '''Show rates without Tax''' – shows rates without TAX&lt;br /&gt;
* '''Show [[Advanced_Rates|Advanced Rates]] for users''' – allows users to see [[Advanced_Rates|Advanced Rates]]&lt;br /&gt;
* '''Show zero rates in LCR tariff export:''' – shows zero rates in LCR tariff exported file.&lt;br /&gt;
* '''Delete outdated Rates after''' - Delete outdated Rates after some dates.&lt;br /&gt;
* '''Show Ghost percent column in Tariffs:''' – if enabled, the Ghost percent column will be shown in the tariff. Default disabled.&lt;br /&gt;
NOTE: if [[Custom Rates]] and/or Tariff Rates are set for the user, only the custom rates will be shown in the details of destination rates. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Statement of Account===&lt;br /&gt;
* ''' PDF Settings ''' - allows to put Address lines of PDF file for Statement of Account.&lt;br /&gt;
*Address line 1: Street Address&lt;br /&gt;
*Address line 2: City, Country&lt;br /&gt;
*Address line 3: Phone, fax&lt;br /&gt;
*Address line 4: Web, email&lt;br /&gt;
*Bank details line 1&lt;br /&gt;
*Bank details line 2&lt;br /&gt;
*Bank details line 3&lt;br /&gt;
*Bank details line 4&lt;br /&gt;
*Bank details line 5&lt;br /&gt;
*Bank details line 6&lt;br /&gt;
*Bank details line 7&lt;br /&gt;
*Bank details line 8&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Privacy==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; Privacy'''&lt;br /&gt;
&lt;br /&gt;
* '''[[Privacy_to_hide_Destination_ends|Privacy to hide Destination ends]]'''&lt;br /&gt;
* '''[[GDPR]] Activated''' – hides User data with notification &amp;quot;Data hidden due GDPR. Press to show data (action will be logged)&amp;quot;. Valid for Admin, Accountant, Reseller and Partner.&lt;br /&gt;
&lt;br /&gt;
== Visual ==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; Visual'''&lt;br /&gt;
&lt;br /&gt;
* '''Items per page (Setting high value can cause performance issues)''' – the number of items to display per one page&lt;br /&gt;
* '''[[Global_date_format| Default date format]]''' – System default date format&lt;br /&gt;
* '''Default Time Format''' – System default time format&lt;br /&gt;
* '''Default Hour Format''' - System default hour format&lt;br /&gt;
* '''Default Number Decimal''' – with this option you can set default number decimal for all GUI&lt;br /&gt;
* '''Number digits''' – how many digits to display after a comma&lt;br /&gt;
* '''Hide Quick Stats in Start page''' – hide Quick stats from start page&lt;br /&gt;
* '''Hide &amp;quot;Information about this page&amp;quot; link''' – hide HELP banner in GUI&lt;br /&gt;
* '''Hide &amp;quot;I want to&amp;quot; help links'''&lt;br /&gt;
* '''[[Remove_Manual_link_from_admin_GUI|Hide &amp;quot;Manual&amp;quot; link]]''' – hides &amp;quot;Manual&amp;quot; link&lt;br /&gt;
*'''Hide Provider Payments from User Payment List''' - default off.&lt;br /&gt;
* '''Show Full Source (CallerID Name and Number)'''&lt;br /&gt;
* '''Use &amp;lt;&amp;gt; brackets in CDR export''' - changes brackets in CDR export&lt;br /&gt;
* '''Show only main page''' – this is a very advanced feature for those who want to hide default MOR menu tree on the left so that they could build their own menu using advanced techniques without modifying MOR GUI sources.&lt;br /&gt;
* '''Show forgot password''', because this functionality requires a unique email in the system. The setting can be unchecked if all emails are unique in the system. &lt;br /&gt;
** '''From Device''' - puts CallerID for the Device that is forwarding the call. If Device CallerID is empty, then the originator's CallerID will be used.&lt;br /&gt;
** '''Same as comes - unchanged''' - leaves the CallerID as it comes from the originator.&lt;br /&gt;
** '''Same as comes - with Diversion''' - leaves the CallerID as it comes from the original caller and additionally adds SIP header Diversion with CallerID from the Device that is forwarding the call (header will not be added if Device does not have CallerID set).&lt;br /&gt;
* '''Show forgot password''' – turns on '''[[MOR_forgot_user_password | Forgot password]]''' functionality.&lt;br /&gt;
* '''Show detailed Quick Stats''' - shows modified quick stats of first page.&lt;br /&gt;
* '''Show Replication Broken warning only for Admin''' - if enabled, shows Replication Broken warning message only for Admin account.&lt;br /&gt;
* '''Change LCR priority by using drag and drop'''&lt;br /&gt;
* '''New Menu Active''' - if enabled, changes main menu to the new structure.&lt;br /&gt;
* '''Dropdown field in User's subscriptions''' - enables old style Service selection in Subscription form.&lt;br /&gt;
* '''Show entered Destination only for Users''' - show the Destination numbers for Users that were entered by them and not Destination numbers after Localization.&lt;br /&gt;
* '''Show Company Name column in Users page''' - show &amp;quot;Company Name&amp;quot; column in Users list page.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Server load ==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; Server load'''&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Settings for GUI Server and Database Server&lt;br /&gt;
&lt;br /&gt;
* '''HDD utilisation higher than''' – Percentage of CPU time during which I/O requests were issued to the device (bandwidth utilization for the device).&lt;br /&gt;
* '''CPU General Load higher than''' – CPU General load higher than – Percentage of the CPU for user processes.&lt;br /&gt;
* '''CPU Load Stats 1 higher than''' – average load per one minute on the system&lt;br /&gt;
* '''CPU MySQL process higher than''' –  Percentage of the CPU for MySQL process&lt;br /&gt;
* '''CPU Ruby process higher than''' –  Percentage of the CPU for Ruby process&lt;br /&gt;
* '''CPU Asterisk process (if present) higher than''' – Percentage of the CPU for Asterisk process&lt;br /&gt;
* '''Delete Server Load Stats older than''' – deletes internal servers load statistics older than defined number of days.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Calls ==&lt;br /&gt;
&lt;br /&gt;
'''SETTINGS –&amp;gt; Setup –&amp;gt; Settings –&amp;gt; Calls'''&lt;br /&gt;
* '''Retrieve PCAP files from the Proxy Server''' – default off. Works only when CCL module is activated.&lt;br /&gt;
&amp;lt;!--- from X18---&amp;gt;&lt;br /&gt;
* '''SQL Max Execution Time''' - max execution time in seconds for SQL query. The default time is 300 seconds (5 minutes). Used in Statistics pages (Calls List export and similar).&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Archived calls]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FTP ==&lt;br /&gt;
Please fill up FTP server details if you want to store Archived calls or/and Backups to FTP server.&lt;br /&gt;
&lt;br /&gt;
* '''IP''' - Enter FTP server IP.&lt;br /&gt;
* '''Port''' - Enter FTP server Port.&lt;br /&gt;
* '''Username''' - Enter FTP server Username.&lt;br /&gt;
* '''Password''' - Enter FTP server Password.&lt;br /&gt;
* '''Path for Archived Calls''' - Enter Path for Archived Calls.&lt;br /&gt;
* '''Path for Backups''' - Enter path for Backups.&lt;br /&gt;
* '''Path for CDR Export''' - Enter path where to export CDRs.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SFTP ==&lt;br /&gt;
Please fill up SFTP server details if you want to use SFTP for [[Automatic CDR Export]].&lt;br /&gt;
&lt;br /&gt;
* '''IP''' - IP of the SFTP server.&lt;br /&gt;
* '''Port''' - Port of the SFTP server.&lt;br /&gt;
* '''Username''' - Username to connect to SFTP server.&lt;br /&gt;
* '''Password''' - Password to connect to SFTP server. &lt;br /&gt;
* '''Use SSH key''' - Use SSH key configured as described [[Configure SSH connection between servers|here]].&lt;br /&gt;
* '''Path for CDR Export''' - Path in SFTP server where to export CDRs.&lt;br /&gt;
* '''Skip CA verification''' - skips SFPT servers CA verification. Try to enable it if the test passes, but if the upload fails. Adds the --insecure option as described here https://curl.se/docs/sslcerts.html&lt;br /&gt;
* '''Path to CA Certificate''' - optional. Allows specifying a custom CA store. Adds the --cacert [file] option as described here https://curl.se/docs/sslcerts.html&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Security ==&lt;br /&gt;
* '''Allow short passwords in devices''' - by default, device passwords are expected to be longer than 7 characters. If enabled, MOR will permit shorter device passwords.&lt;br /&gt;
* '''Use strong passwords for users'''&lt;br /&gt;
* '''Admin login with approved IP only''' - security measure which allows to approve IP's that try to [[MOR_Login_with_approved_IP%27s|login with Admin Account]].&lt;br /&gt;
* '''Enable IP report warning on login failure''' - show [[MOR_Login_Failure_Report|warning]] on unsuccessful login attempts.&lt;br /&gt;
* '''Logout after password change''' - terminates all sessions of the User whose password is changed.&lt;br /&gt;
* '''Logout after closing browser window''' - terminates all sessions of the User after closing browser window.&lt;br /&gt;
* '''Do not logout on session IP change''' - do not logout from MOR GUI if IP is changed.&lt;br /&gt;
* '''2FA Enabled''' - Enables two factors authentication. Two factors authentication requires to enter emailed code during login to user account. '''2FA Enabled must be also enable on individual [[User_Details|User settings]] to make it work for that User.'''&lt;br /&gt;
** '''Email Template''' - [[Emails|email template]] used to send the code.&lt;br /&gt;
** '''Code length (digits)''' - code length.&lt;br /&gt;
** '''Code Enter Attempts Allowed''' - number of attempts to enter the code correctly. Code expires after this number of failed attempts.&lt;br /&gt;
** '''Code Enter Time Allowed''' - code is valid for this amount of time.&lt;br /&gt;
** '''Send Notification Email to Admin on Login''' - allows admin to get email notification on login.&lt;br /&gt;
*** '''Email Template''' - [[Emails|email template]] used to notify admin.&lt;br /&gt;
*** '''On Admin Login''' - get notification on login to Admin's account.&lt;br /&gt;
*** '''On User Login''' - get notification on login to User's accounts.&lt;br /&gt;
** '''Send Notification Email on Login''' - allows this mailbox to get email notification on login.&lt;br /&gt;
*** '''Email Template''' - [[Emails|email template]] used to notify.&lt;br /&gt;
*** '''On Admin Login''' - get notification on login to Admin's account.&lt;br /&gt;
*** '''On User Login''' - get notification on login to User's accounts.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=See also=&lt;br /&gt;
&lt;br /&gt;
* [[Server is overloaded]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=Whitelisted_IPs&amp;diff=31626</id>
		<title>Whitelisted IPs</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=Whitelisted_IPs&amp;diff=31626"/>
		<updated>2026-06-02T16:28:27Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Whitelisted IPs''' can be used from '''Admin''' account and from '''Accountant''' account with Monitoring permissions enabled.&lt;br /&gt;
&lt;br /&gt;
From the Admin account, go to '''SETTINGS -&amp;gt; Security -&amp;gt; Whitelisted IPs''' to manage Whitelisted IPs.&lt;br /&gt;
&lt;br /&gt;
An IP can be whitelisted by entering valid input values and by clicking the '''Whitelist''' icon.&lt;br /&gt;
&lt;br /&gt;
'''The range of IPs''' can be added in a format like '''192.168.0.1-5''', which would result in multiple entries being created (192.168.0.1, 192.168.0.2, 192.168.0.3, 192.168.0.4 and 192.168.0.5).&lt;br /&gt;
&lt;br /&gt;
All the Whitelisted changes will be active in '''one minute after they have been applied.''' Country information (flag) can take up to one hour to appear.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:mor_whitelist_ips_list.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The Comment can be added to the Reason field. If the Reason is not specified, then it will be set to &amp;quot;MOR-WHITELIST-GUI&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
If the country to which the IP belongs is blocked in [[Blocked Countries]], but the IP is added to '''Whitelisted IPs''', it means that the whole country is blocked except for the whitelisted IP.&lt;br /&gt;
&lt;br /&gt;
'''Search''' functionality allows checking if the entered IP exists in the list.&lt;br /&gt;
&lt;br /&gt;
Wildcard '''%''' is available to use in the search.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= Whitelisted IP format =&lt;br /&gt;
It is possible to block IPs in such a format:&lt;br /&gt;
* Single IP, for example, '''2.2.2.2'''&lt;br /&gt;
* Subnet in CIDR notation, for example, '''2.2.2.0/24'''. Please note that CIDR notation will be converted into the canonical format automatically. For example, if you enter 2.2.2.1/24, it will be converted to 2.2.2.0/24. This is because 2.2.2.0/24 denotes the range 2.2.2.1 - 2.2.2.254, so any subnet from 2.2.2.1/24 to 2.2.2.254/24 means exactly the same range, and a canonical way to represent this is range is with 2.2.2.0/24&lt;br /&gt;
* IP range in format x.x.x.x-xx, for example '''2.2.2.1-125'''. Please note that all IPs in the range will be whitelisted as separate IPs, so entering 2.2.2.1-125 would create 125 single IP entries. For this reason, we strongly recommend using subnets if possible.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Allow API access =&lt;br /&gt;
&lt;br /&gt;
Each entry on the '''Whitelisted IPs''' page can be marked '''Allow API access'''. This flag does '''not''' change whether the server accepts network traffic from that IP (GUI whitelist and IP-authenticated device rules work as before). It only controls whether that IP may use the [[MOR API]] and [[MOR API v2]] when '''Restrict API access by IP''' is turned on under [[Configuration from GUI]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== GUI whitelist (upper table) ====&lt;br /&gt;
&lt;br /&gt;
The upper table lists IPs added through '''Whitelisted IPs''' (network whitelist managed from the GUI). For each row you can:&lt;br /&gt;
&lt;br /&gt;
* Set '''Allow API access''' when adding a new IP (checkbox in the add row).&lt;br /&gt;
* Toggle '''Allow API access''' on '''active''' rows (checkbox in the list). The checkbox is not available while a row is still being applied or removed (grey “in progress” state — same as '''Remove''').&lt;br /&gt;
* Single IPs and CIDR prefixes (for example, &amp;lt;code&amp;gt;198.51.100.0/24&amp;lt;/code&amp;gt;) are supported for API matching when the flag is enabled.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== IP authenticated Device or Provider (lower table) ====&lt;br /&gt;
&lt;br /&gt;
The lower table lists IPs taken from the'''IP authenticated Device or Provider''' configuration (devices or providers that authenticate by source IP). These are '''not''' the same as GUI whitelist rows, but you can grant them API access the same way:&lt;br /&gt;
&lt;br /&gt;
* Use the '''Allow API access''' column to allow or deny API calls from that IP when '''Restrict API access by IP''' is enabled.&lt;br /&gt;
* Checking or clearing the box affects '''API access only'''. It does '''not''' add or remove the device’s IP-authentication or SIP whitelist rules on the server.&lt;br /&gt;
&lt;br /&gt;
If the same IPv4 address appears in both tables, either entry with '''Allow API access''' enabled is sufficient for API calls when the restriction is in effect.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== When restriction is enabled ====&lt;br /&gt;
&lt;br /&gt;
With '''Restrict API access by IP''' enabled (see [[Configuration from GUI]]):&lt;br /&gt;
&lt;br /&gt;
* Legacy XML API and [[MOR API v2]] requests are accepted only from client IPv4 addresses that match a row with '''Allow API access''' enabled (exact IP or CIDR).&lt;br /&gt;
* Rows that are still being whitelisted in the GUI (pending state) are treated as allowed for API purposes for a short time so you are not locked out while the server applies the change.&lt;br /&gt;
* If restriction is on and '''no''' row has '''Allow API access''' enabled, API calls are denied until you flag at least one IP on this page or in API settings.&lt;br /&gt;
&lt;br /&gt;
The diagnostic endpoint '''GET /api/v2/ip_access/status''' (see [[MOR API v2]]) remains available to check an IP's block/whitelist status; it is not blocked by this restriction. Other API permissions (user ACL, Allow API globally, and so on) still apply.&lt;br /&gt;
&lt;br /&gt;
Denied API calls from disallowed client IPs may be logged in the [[Action log]] (first deny per client IP within a short interval). Further repeated denials from the same IP are limited to reduce log noise.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[Blocked IPs]]&lt;br /&gt;
* [[How to block someone's IP]]&lt;br /&gt;
* [[How to block country IP]]&lt;br /&gt;
* [[How to add Fail2ban exception for my IP]]&lt;br /&gt;
* [[Monitorings Addon]]&lt;br /&gt;
* [[Configuration from GUI]] — '''Restrict API access by IP''' and '''Allow API globally'''&lt;br /&gt;
* [[MOR API]] — legacy XML API&lt;br /&gt;
* [[MOR API v2]] — REST API, including IP access status&lt;br /&gt;
* [[Monitorings Addon]] — block/whitelist monitoring features&lt;br /&gt;
* [[Blocked IPs]] — block list (separate from API allow flag)&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=Whitelisted_IPs&amp;diff=31625</id>
		<title>Whitelisted IPs</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=Whitelisted_IPs&amp;diff=31625"/>
		<updated>2026-06-02T16:27:40Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Whitelisted IPs''' can be used from '''Admin''' account and from '''Accountant''' account with Monitoring permissions enabled.&lt;br /&gt;
&lt;br /&gt;
From the Admin account, go to '''SETTINGS -&amp;gt; Security -&amp;gt; Whitelisted IPs''' to manage Whitelisted IPs.&lt;br /&gt;
&lt;br /&gt;
An IP can be whitelisted by entering valid input values and by clicking the '''Whitelist''' icon.&lt;br /&gt;
&lt;br /&gt;
'''The range of IPs''' can be added in a format like '''192.168.0.1-5''', which would result in multiple entries being created (192.168.0.1, 192.168.0.2, 192.168.0.3, 192.168.0.4 and 192.168.0.5).&lt;br /&gt;
&lt;br /&gt;
All the Whitelisted changes will be active in '''one minute after they have been applied.''' Country information (flag) can take up to one hour to appear.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:mor_whitelist_ips_list.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The Comment can be added to the Reason field. If the Reason is not specified, then it will be set to &amp;quot;MOR-WHITELIST-GUI&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
If the country to which the IP belongs is blocked in [[Blocked Countries]], but the IP is added to '''Whitelisted IPs''', it means that the whole country is blocked except for the whitelisted IP.&lt;br /&gt;
&lt;br /&gt;
'''Search''' functionality allows checking if the entered IP exists in the list.&lt;br /&gt;
&lt;br /&gt;
Wildcard '''%''' is available to use in the search.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
= Whitelisted IP format =&lt;br /&gt;
It is possible to block IPs in such a format:&lt;br /&gt;
* Single IP, for example, '''2.2.2.2'''&lt;br /&gt;
* Subnet in CIDR notation, for example, '''2.2.2.0/24'''. Please note that CIDR notation will be converted into the canonical format automatically. For example, if you enter 2.2.2.1/24, it will be converted to 2.2.2.0/24. This is because 2.2.2.0/24 denotes the range 2.2.2.1 - 2.2.2.254, so any subnet from 2.2.2.1/24 to 2.2.2.254/24 means exactly the same range, and a canonical way to represent this is range is with 2.2.2.0/24&lt;br /&gt;
* IP range in format x.x.x.x-xx, for example '''2.2.2.1-125'''. Please note that all IPs in the range will be whitelisted as separate IPs, so entering 2.2.2.1-125 would create 125 single IP entries. For this reason, we strongly recommend using subnets if possible.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Allow API access ===&lt;br /&gt;
&lt;br /&gt;
Each entry on the '''Whitelisted IPs''' page can be marked '''Allow API access'''. This flag does '''not''' change whether the server accepts network traffic from that IP (GUI whitelist and IP-authenticated device rules work as before). It only controls whether that IP may use the [[MOR API]] and [[MOR API v2]] when '''Restrict API access by IP''' is turned on under [[Configuration from GUI]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== GUI whitelist (upper table) ====&lt;br /&gt;
&lt;br /&gt;
The upper table lists IPs added through '''Whitelisted IPs''' (network whitelist managed from the GUI). For each row you can:&lt;br /&gt;
&lt;br /&gt;
* Set '''Allow API access''' when adding a new IP (checkbox in the add row).&lt;br /&gt;
* Toggle '''Allow API access''' on '''active''' rows (checkbox in the list). The checkbox is not available while a row is still being applied or removed (grey “in progress” state — same as '''Remove''').&lt;br /&gt;
* Single IPs and CIDR prefixes (for example, &amp;lt;code&amp;gt;198.51.100.0/24&amp;lt;/code&amp;gt;) are supported for API matching when the flag is enabled.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== IP authenticated Device or Provider (lower table) ====&lt;br /&gt;
&lt;br /&gt;
The lower table lists IPs taken from the'''IP authenticated Device or Provider''' configuration (devices or providers that authenticate by source IP). These are '''not''' the same as GUI whitelist rows, but you can grant them API access the same way:&lt;br /&gt;
&lt;br /&gt;
* Use the '''Allow API access''' column to allow or deny API calls from that IP when '''Restrict API access by IP''' is enabled.&lt;br /&gt;
* Checking or clearing the box affects '''API access only'''. It does '''not''' add or remove the device’s IP-authentication or SIP whitelist rules on the server.&lt;br /&gt;
&lt;br /&gt;
If the same IPv4 address appears in both tables, either entry with '''Allow API access''' enabled is sufficient for API calls when the restriction is in effect.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
==== When restriction is enabled ====&lt;br /&gt;
&lt;br /&gt;
With '''Restrict API access by IP''' enabled (see [[Configuration from GUI]]):&lt;br /&gt;
&lt;br /&gt;
* Legacy XML API and [[MOR API v2]] requests are accepted only from client IPv4 addresses that match a row with '''Allow API access''' enabled (exact IP or CIDR).&lt;br /&gt;
* Rows that are still being whitelisted in the GUI (pending state) are treated as allowed for API purposes for a short time so you are not locked out while the server applies the change.&lt;br /&gt;
* If restriction is on and '''no''' row has '''Allow API access''' enabled, API calls are denied until you flag at least one IP on this page or in API settings.&lt;br /&gt;
&lt;br /&gt;
The diagnostic endpoint '''GET /api/v2/ip_access/status''' (see [[MOR API v2]]) remains available to check an IP's block/whitelist status; it is not blocked by this restriction. Other API permissions (user ACL, Allow API globally, and so on) still apply.&lt;br /&gt;
&lt;br /&gt;
Denied API calls from disallowed client IPs may be logged in the [[Action log]] (first deny per client IP within a short interval). Further repeated denials from the same IP are limited to reduce log noise.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[Blocked IPs]]&lt;br /&gt;
* [[How to block someone's IP]]&lt;br /&gt;
* [[How to block country IP]]&lt;br /&gt;
* [[How to add Fail2ban exception for my IP]]&lt;br /&gt;
* [[Monitorings Addon]]&lt;br /&gt;
* [[Configuration from GUI]] — '''Restrict API access by IP''' and '''Allow API globally'''&lt;br /&gt;
* [[MOR API]] — legacy XML API&lt;br /&gt;
* [[MOR API v2]] — REST API, including IP access status&lt;br /&gt;
* [[Monitorings Addon]] — block/whitelist monitoring features&lt;br /&gt;
* [[Blocked IPs]] — block list (separate from API allow flag)&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_-_Blocked_IPs&amp;diff=31624</id>
		<title>MOR - Blocked IPs</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_-_Blocked_IPs&amp;diff=31624"/>
		<updated>2026-06-02T14:32:07Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Blocked IP format */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page allows you to block IP addresses in the MOR's GUI.&lt;br /&gt;
&lt;br /&gt;
'''Blocked IPs''' can be used from '''Admin''' account and from '''Accountant''' account with Monitoring permissions enabled. From Admin account, go to '''Security -&amp;gt; Blocked IPs''' to manage blocked IPs. An IP can be blocked by entering valid input values and by clicking the '''Block''' icon. The to-be-blocked IP '''must not''' be local or a current server IP. By clicking on the Unblock icon, an IP is unblocked. All the blocking/unblocking changes will be active in '''one minute after they have been applied.''' Country information (flag) can take up to one hour to appear.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Mor blocked ips list.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
When IP is blocked manually, the reason is: MOR-BLOCKED-IP-FROM-GUI. When IP is automatically blocked by MOR, the reason says: fail2ban-AST_CLI_Attack. Below you see an example of how it looks in the GUI:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Blocekd_IPs_example.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Explanation of the values given in the '''Reason''' column can be found [[How_to_be_secure_using_MOR#Additional_software_to_increase_MOR_system_security|here]]. Reason &amp;quot;INPUT&amp;quot; means that IP was blocked manually by using these instructions: [[How to block someone%27s IP]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Reasons why IP was not blocked:&amp;lt;br&amp;gt;&lt;br /&gt;
 IP is incorrect or blank&amp;lt;br&amp;gt;&lt;br /&gt;
 IP is already blocked for this server&amp;lt;br&amp;gt;&lt;br /&gt;
 Cannot block server IP&amp;lt;br&amp;gt;&lt;br /&gt;
 IP address is private&amp;lt;br&amp;gt;&lt;br /&gt;
 IP address is local&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can search blocked IP. Possible search by a single IP or for the range using wildcard ''%'', like in the example.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:blocked_ips_search_mor.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Blocked IP format =&lt;br /&gt;
It is possible to block IPs in such a format:&lt;br /&gt;
* Single IP, for example, '''2.2.2.2'''&lt;br /&gt;
* Subnet in CIDR notation, for example, '''2.2.2.0/24'''. Please note that CIDR notation will be automatically converted to the canonical format. For example, if you enter 2.2.2.1/24, it will be converted to 2.2.2.0/24. This is because 2.2.2.0/24 denotes the range 2.2.2.1 - 2.2.2.254, so any subnet from 2.2.2.1/24 to 2.2.2.254/24 means exactly the same range, and a canonical way to represent this is range is with 2.2.2.0/24&lt;br /&gt;
* IP range in format x.x.x-xx, for example '''2.2.2.1-125'''. Please note that all IPs in the range will be blocked as separate IPs, so entering 2.2.2.1-125 would create 125 single IP entries. For this reason, we strongly recommend using subnets if possible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
* [[How to block someone's IP with iptables]]&lt;br /&gt;
* [[How to block country IP]]&lt;br /&gt;
* [[How to add Fail2ban exception for my IP]]&lt;br /&gt;
* [[Whitelisted IPs]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_-_Blocked_IPs&amp;diff=31623</id>
		<title>MOR - Blocked IPs</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_-_Blocked_IPs&amp;diff=31623"/>
		<updated>2026-06-02T14:31:54Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* See Also */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page allows you to block IP addresses in the MOR's GUI.&lt;br /&gt;
&lt;br /&gt;
'''Blocked IPs''' can be used from '''Admin''' account and from '''Accountant''' account with Monitoring permissions enabled. From Admin account, go to '''Security -&amp;gt; Blocked IPs''' to manage blocked IPs. An IP can be blocked by entering valid input values and by clicking the '''Block''' icon. The to-be-blocked IP '''must not''' be local or a current server IP. By clicking on the Unblock icon, an IP is unblocked. All the blocking/unblocking changes will be active in '''one minute after they have been applied.''' Country information (flag) can take up to one hour to appear.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Mor blocked ips list.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
When IP is blocked manually, the reason is: MOR-BLOCKED-IP-FROM-GUI. When IP is automatically blocked by MOR, the reason says: fail2ban-AST_CLI_Attack. Below you see an example of how it looks in the GUI:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:Blocekd_IPs_example.png]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Explanation of the values given in the '''Reason''' column can be found [[How_to_be_secure_using_MOR#Additional_software_to_increase_MOR_system_security|here]]. Reason &amp;quot;INPUT&amp;quot; means that IP was blocked manually by using these instructions: [[How to block someone%27s IP]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Reasons why IP was not blocked:&amp;lt;br&amp;gt;&lt;br /&gt;
 IP is incorrect or blank&amp;lt;br&amp;gt;&lt;br /&gt;
 IP is already blocked for this server&amp;lt;br&amp;gt;&lt;br /&gt;
 Cannot block server IP&amp;lt;br&amp;gt;&lt;br /&gt;
 IP address is private&amp;lt;br&amp;gt;&lt;br /&gt;
 IP address is local&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can search blocked IP. Possible search by a single IP or for the range using wildcard ''%'', like in the example.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:blocked_ips_search_mor.png]]&lt;br /&gt;
= Blocked IP format =&lt;br /&gt;
It is possible to block IPs in such a format:&lt;br /&gt;
* Single IP, for example, '''2.2.2.2'''&lt;br /&gt;
* Subnet in CIDR notation, for example, '''2.2.2.0/24'''. Please note that CIDR notation will be automatically converted to the canonical format. For example, if you enter 2.2.2.1/24, it will be converted to 2.2.2.0/24. This is because 2.2.2.0/24 denotes the range 2.2.2.1 - 2.2.2.254, so any subnet from 2.2.2.1/24 to 2.2.2.254/24 means exactly the same range, and a canonical way to represent this is range is with 2.2.2.0/24&lt;br /&gt;
* IP range in format x.x.x-xx, for example '''2.2.2.1-125'''. Please note that all IPs in the range will be blocked as separate IPs, so entering 2.2.2.1-125 would create 125 single IP entries. For this reason, we strongly recommend using subnets if possible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=See Also=&lt;br /&gt;
&lt;br /&gt;
* [[How to block someone's IP with iptables]]&lt;br /&gt;
* [[How to block country IP]]&lt;br /&gt;
* [[How to add Fail2ban exception for my IP]]&lt;br /&gt;
* [[Whitelisted IPs]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=Automatic_CDR_Export&amp;diff=31622</id>
		<title>Automatic CDR Export</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=Automatic_CDR_Export&amp;diff=31622"/>
		<updated>2026-06-02T14:16:03Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Automatic CDR Export allows to create periodic CDR Export tasks that will be executed automatically on configured time with specific query parameters. Exported data will be archived and sent via Email to User or specific Email address.&lt;br /&gt;
&lt;br /&gt;
==CDR Export Templates==&lt;br /&gt;
&lt;br /&gt;
Automatic CDR Export requires to create at least one [[CDR_Export_Templates|CDR Export Template]] so be sure to create one before proceeding.&lt;br /&gt;
&lt;br /&gt;
==Automatic CDR Export==&lt;br /&gt;
&lt;br /&gt;
Automatic CDR export is configured in '''SETTINGS''' -&amp;gt; '''Billing''' -&amp;gt; '''CDR''' -&amp;gt; '''Export''' -&amp;gt; '''Automatic''':&lt;br /&gt;
&lt;br /&gt;
[[File:Automatic cdr export menu.png]]&lt;br /&gt;
&lt;br /&gt;
Here you will find a list of already configured Automatic CDR Exports:&lt;br /&gt;
&lt;br /&gt;
[[File:Mor automatic cdr export list.png]]&lt;br /&gt;
&lt;br /&gt;
In this list you may active/deactive CDR export tasks, edit or delete existing tasks and create new ones by pressing '''Add new Automatic CDR Export'''.&lt;br /&gt;
&lt;br /&gt;
Note that '''Last run at''' and '''Next run at''' are shown in timezone defined by '''Time Zone''' setting.&lt;br /&gt;
&lt;br /&gt;
==New Automatic CDR Export==&lt;br /&gt;
&lt;br /&gt;
[[File:Automatic cdr export create.png]]&lt;br /&gt;
&lt;br /&gt;
When creating new Automatic CDR Export  you will see two sections: '''Query''' and '''Settings'''.&lt;br /&gt;
&lt;br /&gt;
===Query section===&lt;br /&gt;
&lt;br /&gt;
This section is very similar to filters in Last Calls page. You can set various filters for CDR Export query. These filters work in the same way as they work in Last Call page therefore you may test you query in Last Calls page and if you are happy with result, set same parameters in this Query section.&lt;br /&gt;
&lt;br /&gt;
Note that date filters (From and Till) are missing. These filters depend on CDR Export '''Repeat period''' and will be described bellow.&lt;br /&gt;
&lt;br /&gt;
===Settings section===&lt;br /&gt;
&lt;br /&gt;
====Name====&lt;br /&gt;
&lt;br /&gt;
Name is only for information purposes. This name is shown in Automatic CDR Export list.&lt;br /&gt;
&lt;br /&gt;
====Time Zone====&lt;br /&gt;
&lt;br /&gt;
Time Zone is important setting and should be set correctly depending on situation. All other time related settings will use this Time Zone.&lt;br /&gt;
&lt;br /&gt;
For example, if you want to generate daily CDR Export to your User who lives in specific region, let’s say London, you should set timezone to '''GMT (+00:00) London'''. This way User will get CDR data starting from 00:00:00 till 23:59:59 '''in User’s timezone'''.&lt;br /&gt;
&lt;br /&gt;
Server and User may be in different timezones therefore it is important to set Time Zone to User’s timezone if you intend to generate CDR for this User.&lt;br /&gt;
&lt;br /&gt;
Another thing to consider is when you set '''Start CDR Export at''' setting (will be described later). This variable will also depends on Time Zone setting. For example, maybe you server off-peer hours are 00:00:00 - 06:00:00, but in selected Time Zone off-peer hours may be different.&lt;br /&gt;
&lt;br /&gt;
====Repeat period====&lt;br /&gt;
&lt;br /&gt;
Repeat period defines how often CDR Export is executed and which period is used for data retrieval. For this reason Query section is missing From and Till.&lt;br /&gt;
&lt;br /&gt;
Note that this setting depends on Time Zone variable.&lt;br /&gt;
&lt;br /&gt;
=====Hourly=====&lt;br /&gt;
&lt;br /&gt;
CDR export will be executed each hour. CDR data will correspond to whole '''previous''' hour. &lt;br /&gt;
&lt;br /&gt;
For example, if CDR export was executed on 2016-11-11 10:00:00, then CDR will be for 2016-11-11 09:00:00 - 2016-11-11 09:59:59 period. &lt;br /&gt;
&lt;br /&gt;
In other words, it will work as if you set From to 2016-11-11 09:00:00 and Till to 2016-11-11 09:59:59 in date filters.&lt;br /&gt;
&lt;br /&gt;
=====Daily=====&lt;br /&gt;
&lt;br /&gt;
CDR export will be executed each day. CDR data will correspond to whole '''previous''' day. &lt;br /&gt;
&lt;br /&gt;
For example, if CDR export was executed on 2016-11-11 00:00:00, then CDR will be for 2016-11-10 00:00:00 - 2016-11-10 23:59:59 period.&lt;br /&gt;
&lt;br /&gt;
=====Weekly=====&lt;br /&gt;
&lt;br /&gt;
CDR export will be executed each week. CDR data will correspond to whole '''previous''' week. &lt;br /&gt;
&lt;br /&gt;
For example, if CDR export was executed on 2016-11-14 00:00:00 (monday), then CDR will be for 2016-11-07 00:00:00 (monday) - 2016-11-13 23:59:59 (sunday) period. Data period is always monday - sunday.&lt;br /&gt;
&lt;br /&gt;
=====Bi-weekly=====&lt;br /&gt;
&lt;br /&gt;
CDR export will be executed each twice a month. CDR data will correspond either to 1-15 day of month or 16 - end of month. &lt;br /&gt;
&lt;br /&gt;
For example, if CDR export was executed on 2016-11-16 00:00:00, then CDR will be for 2016-11-01 00:00:00 - 2016-11-15 23:59:59 period. If CDR export was executed on 2016-12-01 00:00:00, then CDR will be for 2016-11-16 00:00:00 - 2016-11-30 23:59:59 period. &lt;br /&gt;
&lt;br /&gt;
=====Monthly=====&lt;br /&gt;
&lt;br /&gt;
CDR export will be executed each month. CDR data will correspond to whole '''previous''' month. &lt;br /&gt;
&lt;br /&gt;
For example, if CDR export was executed on 2016-11-01 00:00:00, then CDR will be for 2016-10-01 00:00:00 - 2016-10-31 23:59:59 period. Data period is always first day of the month - last day of the month (whole month).&lt;br /&gt;
&lt;br /&gt;
If you choose specific day of the month, for example, 15, then CDR will be generated for 2016-10-15 00:00:00 - 2016-11-14 23:59:59 and will be sent at 2016-11-15 00:00:00&lt;br /&gt;
&lt;br /&gt;
*Example.&lt;br /&gt;
Today is 15th of April.&lt;br /&gt;
If we choose 14th or 15th day (Past or Today), then CDR will be generated only next month.&lt;br /&gt;
If we choose 17th day (Future), then CDR will be generated for previous month till 16th of April 23:59:59&lt;br /&gt;
&lt;br /&gt;
=====Only once=====&lt;br /&gt;
&lt;br /&gt;
CDR export will be executed on specific date and time. Also, in Query section two additional filters will be displayed - From and Till. These filters allow to specify date period for CDR Export query (in selected Time Zone).&lt;br /&gt;
&lt;br /&gt;
====Start CDR Export at====&lt;br /&gt;
&lt;br /&gt;
If you have selected '''Daily''', '''Weekly''', '''Bi-weekly''' or '''Monthly''' periods, you may select specific hours when Automatic CDR export should be executed. This is useful because you may choose off-peek hours. Automatic CDR Export is executed only during selected hour period.&lt;br /&gt;
&lt;br /&gt;
If you have selected '''Only once''' period, you have to set full date (days and hours). This is because '''Only once''' is not periodic and should have specific date and time.&lt;br /&gt;
&lt;br /&gt;
Things to consider:&lt;br /&gt;
&lt;br /&gt;
* Choose off-peek hours, this will reduce load on system;&lt;br /&gt;
* Be carefull when midnight is selected (00:00) because User may start new Call just before midnight and that Call may last for more than an hour. In this case, you may want to start CDR export few hours after midnight so all User’s Calls have time to finish;&lt;br /&gt;
* Hourly period may be inaccurate for the reason described above.&lt;br /&gt;
&lt;br /&gt;
Note that this setting depends on Time Zone variable.&lt;br /&gt;
&lt;br /&gt;
====Template====&lt;br /&gt;
&lt;br /&gt;
Select which [[CDR_Export_Templates|CDR Export Template]] to use.&lt;br /&gt;
&lt;br /&gt;
====Filename Prefix====&lt;br /&gt;
&lt;br /&gt;
Select a prefix of how file name will be started from.&lt;br /&gt;
&lt;br /&gt;
==== Archive extension====&lt;br /&gt;
&lt;br /&gt;
Select extension type to archive: tgz, zip or gzip&lt;br /&gt;
&lt;br /&gt;
====Send CDR to====&lt;br /&gt;
&lt;br /&gt;
Select who should receive CDR Export. It can be either User, a specific Email address, an FTP, or an SFTP server. If User is selected then Email address will be taken from Users settings (make sure that User has email).&lt;br /&gt;
&lt;br /&gt;
Also make sure that email sending is configured correctly.&lt;br /&gt;
&lt;br /&gt;
CDRs will be '''archived''' and sent to User/Email. &lt;br /&gt;
&lt;br /&gt;
If archive is sent successfully, User should receive success email which can be customised in [[Email_variables#CDR_Export|Emails]] settings. CDR archive will be attached.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' archive size is limited to '''10MB'''! If CDR archive is larger, then archive will not be sent via Email and User will receive error Email instead.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' if '''Custom Email''' option is yous and you want to send CDRs to more than one email, please separate the emails with ''';''' sign.&lt;br /&gt;
&lt;br /&gt;
'''FTP''' - Please fill FTP server details at [https://wiki.kolmisoft.com/index.php/Configuration_from_GUI#FTP FTP] tab.&lt;br /&gt;
&lt;br /&gt;
'''SFTP''' - Please fill SFTP server details at [https://wiki.kolmisoft.com/index.php/Configuration_from_GUI#SFTP SFTP] tab.&lt;br /&gt;
&lt;br /&gt;
==Next run at==&lt;br /&gt;
&lt;br /&gt;
In Automatic CDR Export list you should see '''Next run at''' column. This shows date and time (in selected Timezone) when CDR export will be executed. &lt;br /&gt;
&lt;br /&gt;
What happens when you create new Automatic CDR Export? When CDR Export will be executed? It depends on Repeat period. New Automatic CDR Export is executed '''on next period'''. For example, if you have created '''Hourly''' Automatic CDR Export on 2016-11-11 09:11:45, then the first time CDR Export is executed will be on 2016-11-11 10:00:00.&lt;br /&gt;
&lt;br /&gt;
If you have created '''Daily''' Automatic CDR Export on 2016-11-11 09:11:45, then the first time CDR Export is executed will be on 2016-11-12 00:00:00.&lt;br /&gt;
&lt;br /&gt;
If you have created '''Monthly''' Automatic CDR Export on 2016-11-11 09:11:45, then the first time CDR Export is executed will be on 2016-12-01 00:00:00.&lt;br /&gt;
&lt;br /&gt;
Of course hours may be different depending on '''Start CDR Export at''', but the idea is that CDR Export is executed on next period, either it is next hour, next day, next week or next month.&lt;br /&gt;
&lt;br /&gt;
==File names==&lt;br /&gt;
&lt;br /&gt;
CDR Export output is a CSV file compressed in tgz archive. Filename is based on dates, for example if CDR Export was executed for 2016-11-01 00:00:00 - 2016-11-30 23:59:59 period, then file names will be:&lt;br /&gt;
&lt;br /&gt;
'''CSV filename:''' MOR_CDR_export_20161122_000000_20161122_235959.csv&amp;lt;br&amp;gt;&lt;br /&gt;
'''TGZ filename:''' MOR_CDR_export_20161122_000000_20161122_235959.tgz&lt;br /&gt;
&lt;br /&gt;
==CDR Export and performance==&lt;br /&gt;
&lt;br /&gt;
CDR Export is resource intensive task. Consider having as little Automatic CDR Export tasks as possible. Also shorter Repeat periods have better peformance.&lt;br /&gt;
&lt;br /&gt;
It is advisable to set '''Start CDR Export at''' to off-peak hours. Also,''' Start CDR Export at''' allows to spread tasks across hours during the day.&lt;br /&gt;
&lt;br /&gt;
==How old CDR Export tasks are handled==&lt;br /&gt;
&lt;br /&gt;
There might be situations when script responsible for CDR Export functionality was not running for long time. What happens to all CDRs that were supposed to be generated during that time when script was not running? Only single CDR for latest period will be generated. This is done intentionally to prevent high amount of CDR Export tasks to run at a time.&lt;br /&gt;
&lt;br /&gt;
For example, if '''Monthly''' CDR Export tasks was created on January but for some reason CDR Export script was not executed until November, then CDR Export for January-September will be skipped. Script will generate CDR Export for October and sets '''Next run at''' to December.&lt;br /&gt;
&lt;br /&gt;
This logic does not apply to '''Only once''' period. All tasks with '''Only once''' period will be executed.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
&lt;br /&gt;
[[CDR_Export_Templates|CDR Export Templates]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Email_variables#CDR_Export|Emails Templates variables]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_v2_user_assign_provider&amp;diff=31621</id>
		<title>MOR API v2 user assign provider</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_v2_user_assign_provider&amp;diff=31621"/>
		<updated>2026-06-02T13:29:55Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;Assign or unassign an unassigned provider trunk to a simple user so the provider can place calls using that user's balance — the same workflow as Configure Provider which can make calls in the GUI.  &amp;lt;br&amp;gt;&amp;lt;br&amp;gt; == GUI equivalent ==  '''Who may use the API:''' Admin, Accountant (with the rights below), or Reseller when provider management is allowed for that reseller. Simple users cannot assign providers....&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Assign or unassign an unassigned [[Providers|provider]] trunk to a simple [[Users|user]] so the provider can place calls using that user's balance — the same workflow as [[Configure Provider which can make calls|Configure Provider which can make calls]] in the GUI.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== GUI equivalent ==&lt;br /&gt;
&lt;br /&gt;
'''Who may use the API:''' Admin, Accountant (with the rights below), or Reseller when provider management is allowed for that reseller. Simple users cannot assign providers.&lt;br /&gt;
&lt;br /&gt;
'''Menu path (admin / accountant):''' '''SETTINGS → Users → Users''' — open the '''Devices''' link for a simple user, then use '''Assign Provider''' to pick an unassigned provider. To remove an assignment, open the [[Providers|provider]] and use '''Unassign provider''' (or the unassign action from the user's Devices view when shown).&lt;br /&gt;
&lt;br /&gt;
'''Restrictions (same as GUI):''' The path user must be a simple user (not a reseller or accountant). The provider must be unassigned before being assigned. A user may have more than one provider assigned.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Authentication ==&lt;br /&gt;
&lt;br /&gt;
[[MOR API v2]] Bearer JWT — obtain a token via &amp;lt;code&amp;gt;POST /billing/api/v2/authentication/login&amp;lt;/code&amp;gt; (see [[MOR API v2#Usage|Usage]] on the hub page).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== API permission methods ==&lt;br /&gt;
&lt;br /&gt;
When the authenticated user has API restrictions enabled, the user's API permission group must grant:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! API method key !! Permission (Write) !! Used for&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;v2_users_assign_provider&amp;lt;/code&amp;gt; || Assign Provider to User || &amp;lt;code&amp;gt;POST …/assign_provider&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;v2_users_unassign_provider&amp;lt;/code&amp;gt; || Unassign Provider from User || &amp;lt;code&amp;gt;DELETE …/assign_provider&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See [[How to block access to some API functions]] for restricting API methods per user.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Accountant GUI rights ==&lt;br /&gt;
&lt;br /&gt;
In addition to the API methods above, an accountant needs write access on all of:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;acc_device_manage&amp;lt;/code&amp;gt; (Devices)&lt;br /&gt;
* &amp;lt;code&amp;gt;manage_provider&amp;lt;/code&amp;gt; (Providers)&lt;br /&gt;
* &amp;lt;code&amp;gt;user_manage&amp;lt;/code&amp;gt; (Users)&lt;br /&gt;
&lt;br /&gt;
See [[Accountant permissions]] for how accountant groups are configured.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Reseller ==&lt;br /&gt;
&lt;br /&gt;
Allowed only when the reseller is permitted to manage providers (same rule as legacy provider API write access). The target user must belong to that reseller.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Assign provider ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;POST /billing/api/v2/users/{id}/assign_provider&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Path'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;{id}&amp;lt;/code&amp;gt; — target simple user id.&lt;br /&gt;
&lt;br /&gt;
'''JSON body'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Field !! Required !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;provider_id&amp;lt;/code&amp;gt; || yes* || Provider id to assign.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;provider_device_id&amp;lt;/code&amp;gt; || no || Provider trunk device id (GUI &amp;lt;code&amp;gt;provdevice&amp;lt;/code&amp;gt;). Ignored when &amp;lt;code&amp;gt;provider_id&amp;lt;/code&amp;gt; is present.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*One of &amp;lt;code&amp;gt;provider_id&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;provider_device_id&amp;lt;/code&amp;gt; is required.&lt;br /&gt;
&lt;br /&gt;
'''Success (200)'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;status&amp;quot;: &amp;quot;assigned&amp;quot;,&lt;br /&gt;
  &amp;quot;user_id&amp;quot;: 123,&lt;br /&gt;
  &amp;quot;provider_id&amp;quot;: 1,&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: 456,&lt;br /&gt;
  &amp;quot;warnings&amp;quot;: []&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''warnings''' may contain a localized hint when another provider under the same owner shares the same registration (login, password, IP, and port) — the same caution as the GUI '''Avoid routing problems''' message.&lt;br /&gt;
&lt;br /&gt;
If the device extension configuration fails after assignment, the API returns &amp;lt;code&amp;gt;422&amp;lt;/code&amp;gt; and does not mark the assignment as successful (stricter than the GUI, which may show a partial state).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Unassign provider ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;DELETE /billing/api/v2/users/{id}/assign_provider&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Path'''&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;{id}&amp;lt;/code&amp;gt; — same simple user as assign.&lt;br /&gt;
&lt;br /&gt;
'''Query parameters (preferred for automation)'''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Required !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;provider_id&amp;lt;/code&amp;gt; || yes* || Provider id to remove from this user.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;provider_device_id&amp;lt;/code&amp;gt; || no || Provider trunk device id. Ignored when &amp;lt;code&amp;gt;provider_id&amp;lt;/code&amp;gt; is set.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*One of &amp;lt;code&amp;gt;provider_id&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;provider_device_id&amp;lt;/code&amp;gt; is required.&lt;br /&gt;
&lt;br /&gt;
'''Success (200)'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;status&amp;quot;: &amp;quot;unassigned&amp;quot;,&lt;br /&gt;
  &amp;quot;user_id&amp;quot;: 123,&lt;br /&gt;
  &amp;quot;provider_id&amp;quot;: 1,&lt;br /&gt;
  &amp;quot;device_id&amp;quot;: 456&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unassign is blocked when the provider device still has CLIs configured (same as the GUI).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Errors ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! HTTP !! Typical cause&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;401&amp;lt;/code&amp;gt; || Invalid or missing JWT, API disabled, missing accountant/reseller rights, or API method not permitted (&amp;lt;code&amp;gt;v2_users_assign_provider&amp;lt;/code&amp;gt; / &amp;lt;code&amp;gt;v2_users_unassign_provider&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;403&amp;lt;/code&amp;gt; || Target user not under the authenticated owner (forbidden).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;404&amp;lt;/code&amp;gt; || User or provider not found, or provider not available for assignment (already assigned / wrong owner).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;422&amp;lt;/code&amp;gt; || Path user is not a simple user; provider already assigned; provider not assigned to this user; CLIs block unassign; assign rolled back after extension configuration failure.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
'''Assign'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -s -X POST -H &amp;quot;Authorization: Bearer $TOKEN&amp;quot; -H &amp;quot;Content-Type: application/json&amp;quot; \&lt;br /&gt;
  -d '{&amp;quot;provider_id&amp;quot;:1}' \&lt;br /&gt;
  &amp;quot;https://example.com/billing/api/v2/users/123/assign_provider&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Unassign'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -s -X DELETE -H &amp;quot;Authorization: Bearer $TOKEN&amp;quot; \&lt;br /&gt;
  &amp;quot;https://example.com/billing/api/v2/users/123/assign_provider?provider_id=1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[MOR API v2]] — authentication and OpenAPI (&amp;lt;code&amp;gt;/billing/api/v2/api-docs/&amp;lt;/code&amp;gt;)&lt;br /&gt;
* [[Configure Provider which can make calls]] — product workflow and balance behaviour&lt;br /&gt;
* [[Providers]] — creating and editing providers&lt;br /&gt;
* [[Users]] — simple users and devices&lt;br /&gt;
* [[Accountant permissions]] — accountant group rights&lt;br /&gt;
* [[How to block access to some API functions]] — per-user API method groups&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_v2&amp;diff=31620</id>
		<title>MOR API v2</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_v2&amp;diff=31620"/>
		<updated>2026-06-02T13:28:50Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* APIs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=About=&lt;br /&gt;
MOR API lets other software interact with MOR without knowing the internal structure of the database (DB) and other logic.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=MOR users that are allowed to use the MOR API=&lt;br /&gt;
* Admin&lt;br /&gt;
* Reseller&lt;br /&gt;
* Accountant&lt;br /&gt;
* Simple User&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
Open GUI using MOR IP/domain http://IP_or_Domain/billing/api/v2/api-docs/.&lt;br /&gt;
&lt;br /&gt;
Press on '''Authorize''' and enter User credentials (Admin, Manager, Reseller, or User) to the '''basicAuth''' field and press '''Authorize'''.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_basicAuth.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_basicAuth_login.png]] &lt;br /&gt;
&lt;br /&gt;
Copy the token and use it for JWT authentication.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth_execute.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth_token.png]]&lt;br /&gt;
&lt;br /&gt;
Enter the token to '''bearerAuthorization''' authorization field and press '''Authorize'''.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_bearerAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
You can now use the available APIs. Expand them to see the documentation.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=APIs=&lt;br /&gt;
&lt;br /&gt;
==Active Calls==&lt;br /&gt;
* [[MOR_API_drop_active_calls|drop_active_calls]] - drop active calls.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calls==&lt;br /&gt;
* [[MOR_API_v2_Calls|retrieve_calls]] - retrieves the list of calls in the selected time period for the specified User/Device.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DIDs ==&lt;br /&gt;
* [[MOR API v2 DIDs|dids]] — list DIDs visible to the authenticated admin or accountant (JSON).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Flash Calls==&lt;br /&gt;
* [[MOR API flash calls|flash_calls]] - initiate a Flash Call.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Ring Groups ==&lt;br /&gt;
* [[MOR API v2 ring_groups|ring_groups]] - List ring groups with member device extensions and caller IDs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Security==&lt;br /&gt;
&lt;br /&gt;
* [[MOR API IP access|ip_access]] - Read-only check whether an IPv4 address appears in MOR Monitorings block/whitelist lists.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Users ==&lt;br /&gt;
&lt;br /&gt;
* '''[[MOR API v2 user_assign_provider|user_assign_provider]]''' — Assign or unassign an unassigned [[Providers|provider]] to a simple [[Users|user]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==AI Transcriptions==&lt;br /&gt;
* [[MOR API Transcriptions AI|AI Transcriptions]] - recording voice-to-text.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_v2&amp;diff=31619</id>
		<title>MOR API v2</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_v2&amp;diff=31619"/>
		<updated>2026-06-02T13:27:27Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* APIs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=About=&lt;br /&gt;
MOR API lets other software interact with MOR without knowing the internal structure of the database (DB) and other logic.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=MOR users that are allowed to use the MOR API=&lt;br /&gt;
* Admin&lt;br /&gt;
* Reseller&lt;br /&gt;
* Accountant&lt;br /&gt;
* Simple User&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
Open GUI using MOR IP/domain http://IP_or_Domain/billing/api/v2/api-docs/.&lt;br /&gt;
&lt;br /&gt;
Press on '''Authorize''' and enter User credentials (Admin, Manager, Reseller, or User) to the '''basicAuth''' field and press '''Authorize'''.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_basicAuth.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_basicAuth_login.png]] &lt;br /&gt;
&lt;br /&gt;
Copy the token and use it for JWT authentication.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth_execute.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth_token.png]]&lt;br /&gt;
&lt;br /&gt;
Enter the token to '''bearerAuthorization''' authorization field and press '''Authorize'''.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_bearerAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
You can now use the available APIs. Expand them to see the documentation.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=APIs=&lt;br /&gt;
&lt;br /&gt;
==Active Calls==&lt;br /&gt;
* [[MOR_API_drop_active_calls|drop_active_calls]] - drop active calls.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calls==&lt;br /&gt;
* [[MOR_API_v2_Calls|retrieve_calls]] - retrieves the list of calls in the selected time period for the specified User/Device.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DIDs ==&lt;br /&gt;
* [[MOR API v2 DIDs|dids]] — list DIDs visible to the authenticated admin or accountant (JSON).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Flash Calls==&lt;br /&gt;
* [[MOR API flash calls|flash_calls]] - initiate a Flash Call.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Ring Groups ==&lt;br /&gt;
* [[MOR API v2 ring_groups|ring_groups]] - List ring groups with member device extensions and caller IDs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Security==&lt;br /&gt;
&lt;br /&gt;
* [[MOR API IP access|ip_access]] - Read-only check whether an IPv4 address appears in MOR Monitorings block/whitelist lists.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Users ==&lt;br /&gt;
&lt;br /&gt;
* '''assign_provider''' — Assign or unassign an unassigned [[Providers|provider]] to a simple [[Users|user]]. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==AI Transcriptions==&lt;br /&gt;
* [[MOR API Transcriptions AI|AI Transcriptions]] - recording voice-to-text.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_v2_ring_groups&amp;diff=31618</id>
		<title>MOR API v2 ring groups</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_v2_ring_groups&amp;diff=31618"/>
		<updated>2026-06-02T11:42:24Z</updated>

		<summary type="html">&lt;p&gt;Admin: Created page with &amp;quot;== Ring Groups ==  List ring groups with member device extensions and caller IDs (MOR API v2).  === Authentication ===  Bearer JWT — same as other MOR API v2 endpoints. Obtain a token via &amp;lt;code&amp;gt;POST /api/v2/authentication/login&amp;lt;/code&amp;gt;.  === Endpoint ===  &amp;lt;code&amp;gt;GET /api/v2/ring_groups&amp;lt;/code&amp;gt;  === Authorization ===  * Admin — allowed when PBX addon is active. * Accountant — requires &amp;lt;code&amp;gt;manage_ring_groups&amp;lt;/code&amp;gt; (read) and API method &amp;lt;code&amp;gt;v2_ring_groups_index&amp;lt;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ring Groups ==&lt;br /&gt;
&lt;br /&gt;
List ring groups with member device extensions and caller IDs (MOR API v2).&lt;br /&gt;
&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
&lt;br /&gt;
Bearer JWT — same as other [[MOR API v2]] endpoints. Obtain a token via &amp;lt;code&amp;gt;POST /api/v2/authentication/login&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Endpoint ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;GET /api/v2/ring_groups&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Authorization ===&lt;br /&gt;
&lt;br /&gt;
* Admin — allowed when PBX addon is active.&lt;br /&gt;
* Accountant — requires &amp;lt;code&amp;gt;manage_ring_groups&amp;lt;/code&amp;gt; (read) and API method &amp;lt;code&amp;gt;v2_ring_groups_index&amp;lt;/code&amp;gt; granted on the user's API permission group when API restrictions apply.&lt;br /&gt;
* User / Reseller — not supported.&lt;br /&gt;
&lt;br /&gt;
=== Query parameters ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Parameter !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;search_name&amp;lt;/code&amp;gt; || Filter by ring group name (LIKE on dialplan name).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;search_extension&amp;lt;/code&amp;gt; || Filter by ring group local extension (LIKE on dialplan extension).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;from&amp;lt;/code&amp;gt; || 1-based offset for pagination.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;max_results&amp;lt;/code&amp;gt; || Page size. When omitted, all matching rows are returned.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Response (200) ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;ring_groups&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;id&amp;quot;: 1,&lt;br /&gt;
      &amp;quot;name&amp;quot;: &amp;quot;RGname&amp;quot;,&lt;br /&gt;
      &amp;quot;extension&amp;quot;: &amp;quot;100&amp;quot;,&lt;br /&gt;
      &amp;quot;comment&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;timeout&amp;quot;: 60,&lt;br /&gt;
      &amp;quot;strategy&amp;quot;: &amp;quot;ringall&amp;quot;,&lt;br /&gt;
      &amp;quot;cid_prefix&amp;quot;: &amp;quot;&amp;quot;,&lt;br /&gt;
      &amp;quot;pbx_pool_id&amp;quot;: 1,&lt;br /&gt;
      &amp;quot;inbound_dids&amp;quot;: [&amp;quot;+37060011244&amp;quot;],&lt;br /&gt;
      &amp;quot;members&amp;quot;: [&lt;br /&gt;
        {&lt;br /&gt;
          &amp;quot;device_id&amp;quot;: 3,&lt;br /&gt;
          &amp;quot;priority&amp;quot;: 0,&lt;br /&gt;
          &amp;quot;device_type&amp;quot;: &amp;quot;SIP&amp;quot;,&lt;br /&gt;
          &amp;quot;device_name&amp;quot;: &amp;quot;101&amp;quot;,&lt;br /&gt;
          &amp;quot;extension&amp;quot;: &amp;quot;101&amp;quot;,&lt;br /&gt;
          &amp;quot;callerid&amp;quot;: &amp;quot;+37060000101&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
      ]&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: { &amp;quot;from&amp;quot;: 1, &amp;quot;max_results&amp;quot;: 500, &amp;quot;returned&amp;quot;: 1 }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Errors ===&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;401&amp;lt;/code&amp;gt; — missing/invalid token, insufficient GUI rights, or API method not permitted.&lt;br /&gt;
* &amp;lt;code&amp;gt;403&amp;lt;/code&amp;gt; — PBX addon inactive (&amp;lt;code&amp;gt;You are not authorized to view this page&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
&lt;br /&gt;
* Use this endpoint to export ring group names and member numbers. &amp;lt;code&amp;gt;GET /api/v2/dids&amp;lt;/code&amp;gt; only shows inbound DIDs routed to a ring group dialplan, not member devices.&lt;br /&gt;
* Member &amp;lt;code&amp;gt;extension&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;callerid&amp;lt;/code&amp;gt; come from the device record. Additional numbers stored only as device CLIs are not included in v1.&lt;br /&gt;
* Clients may build a flat phone list per group from non-empty &amp;lt;code&amp;gt;members[].extension&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;members[].callerid&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[MOR API v2]]&lt;br /&gt;
* [[MOR API v2 DIDs]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_v2&amp;diff=31617</id>
		<title>MOR API v2</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_v2&amp;diff=31617"/>
		<updated>2026-06-02T11:39:52Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* APIs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=About=&lt;br /&gt;
MOR API lets other software interact with MOR without knowing the internal structure of the database (DB) and other logic.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=MOR users that are allowed to use the MOR API=&lt;br /&gt;
* Admin&lt;br /&gt;
* Reseller&lt;br /&gt;
* Accountant&lt;br /&gt;
* Simple User&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
Open GUI using MOR IP/domain http://IP_or_Domain/billing/api/v2/api-docs/.&lt;br /&gt;
&lt;br /&gt;
Press on '''Authorize''' and enter User credentials (Admin, Manager, Reseller, or User) to the '''basicAuth''' field and press '''Authorize'''.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_basicAuth.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_basicAuth_login.png]] &lt;br /&gt;
&lt;br /&gt;
Copy the token and use it for JWT authentication.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth_execute.png]]&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_user_auth_token.png]]&lt;br /&gt;
&lt;br /&gt;
Enter the token to '''bearerAuthorization''' authorization field and press '''Authorize'''.&lt;br /&gt;
&lt;br /&gt;
[[File:MOR_api_v2_bearerAuthorization.png]]&lt;br /&gt;
&lt;br /&gt;
You can now use the available APIs. Expand them to see the documentation.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=APIs=&lt;br /&gt;
&lt;br /&gt;
==Active Calls==&lt;br /&gt;
* [[MOR_API_drop_active_calls|drop_active_calls]] - drop active calls.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Calls==&lt;br /&gt;
* [[MOR_API_v2_Calls|retrieve_calls]] - retrieves the list of calls in the selected time period for the specified User/Device.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DIDs ==&lt;br /&gt;
* [[MOR API v2 DIDs|dids]] — list DIDs visible to the authenticated admin or accountant (JSON).&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Flash Calls==&lt;br /&gt;
* [[MOR API flash calls|flash_calls]] - initiate a Flash Call.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Ring Groups ==&lt;br /&gt;
* [[MOR API v2 ring_groups|ring_groups]] - List ring groups with member device extensions and caller IDs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Security==&lt;br /&gt;
&lt;br /&gt;
* [[MOR API IP access|ip_access]] - Read-only check whether an IPv4 address appears in MOR Monitorings block/whitelist lists.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
==AI Transcriptions==&lt;br /&gt;
* [[MOR API Transcriptions AI|AI Transcriptions]] - recording voice-to-text.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_v2_DIDs&amp;diff=31616</id>
		<title>MOR API v2 DIDs</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_v2_DIDs&amp;diff=31616"/>
		<updated>2026-06-02T10:18:09Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Returns */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List DIDs via [[MOR API v2]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
Full MOR REST API documentation is available at &amp;lt;code&amp;gt;/billing/api/v2/api-docs/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
The DIDs API retrieves the list of DIDs visible to the authenticated '''admin''' or '''accountant''' user. Responses are JSON. The same data scope and VoiceAI integration fields as legacy [[MOR API dids get|dids_get]] apply. Authentication follows [[MOR API v2#Usage|Usage]] on the parent page (JWT via Basic login).&lt;br /&gt;
&lt;br /&gt;
Only '''admin''' and '''accountant''' users may call this endpoint. '''Reseller''' and '''simple user''' accounts receive HTTP 401.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
'''Endpoint:''' &amp;lt;code&amp;gt;GET /billing/api/v2/dids&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Query parameters (all optional):&lt;br /&gt;
&lt;br /&gt;
* '''search_did_number''' — filter by DID number (SQL LIKE partial match)&lt;br /&gt;
* '''search_status''' — lifecycle filter: '''free''', '''reserved''', '''active''', '''closed''', '''terminated''' (lowercase; see '''did_status''' in the response)&lt;br /&gt;
* '''search_hide_terminated_dids''' — '''1''' hide terminated DIDs, '''0''' show&lt;br /&gt;
* '''from''' — '''1-based''' index of the first record to return (pagination; same as legacy '''dids_get''')&lt;br /&gt;
* '''max_results''' — page size. When omitted, the server returns all matching rows (legacy parity). Integrators with large inventories should paginate (for example '''max_results=500''').&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
&lt;br /&gt;
The DIDs API requires the same authentication as other [[MOR API v2]] endpoints: Basic authentication to obtain a JWT, then a Bearer token on each request. See [[MOR API v2#Usage|Usage]] on the parent page.&lt;br /&gt;
&lt;br /&gt;
'''Basic authentication (login)'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;POST /billing/api/v2/authentication/login&amp;lt;/code&amp;gt; with HTTP Authorization header &amp;lt;code&amp;gt;Basic base64(username:password)&amp;lt;/code&amp;gt;. Use the user's '''GUI password''' (the same password as for the MOR web interface), not the global API Secret Key.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
POST http://&amp;amp;lt;SERVER_IP&amp;amp;gt;/billing/api/v2/authentication/login HTTP/1.1&lt;br /&gt;
Authorization: Basic &amp;amp;lt;base64(accountant:password)&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''JWT authentication (list DIDs)'''&amp;lt;br&amp;gt;&lt;br /&gt;
Pass the &amp;lt;code&amp;gt;access_token&amp;lt;/code&amp;gt; from login in the Authorization header. The access token is valid for 15 minutes; use &amp;lt;code&amp;gt;/billing/api/v2/authentication/refresh&amp;lt;/code&amp;gt; before expiry.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET http://&amp;amp;lt;SERVER_IP&amp;amp;gt;/billing/api/v2/dids?search_status=free&amp;amp;amp;from=1&amp;amp;amp;max_results=500&lt;br /&gt;
Authorization: Bearer &amp;amp;lt;access_token&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Authorization and visibility ===&lt;br /&gt;
&lt;br /&gt;
* '''Accountant''' users need '''Manage DIDs''' read permission on their accountant permission group; otherwise the API returns HTTP 401 with &amp;lt;code&amp;gt;{&amp;quot;errors&amp;quot;:&amp;quot;Unauthorized&amp;quot;}&amp;lt;/code&amp;gt;.&lt;br /&gt;
* When '''API restricted''' is enabled on the user and an API permission group is assigned, the logical method '''dids_get''' must be allowed in that group (for example the '''VoiceAI DIDs Reader''' preset); otherwise the response is HTTP 401 with &amp;lt;code&amp;gt;{&amp;quot;errors&amp;quot;:&amp;quot;API method not permitted: dids_get&amp;quot;}&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''Admin''' and '''accountant''' (with Manage DIDs) see system-wide DIDs. '''Reseller''' and '''simple user''' are not permitted on this v2 endpoint.&lt;br /&gt;
* Fields such as '''provider''' and '''dial_plan''' are included for admin and accountant responses only.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Integration user setup ===&lt;br /&gt;
&lt;br /&gt;
Typical read-only DID inventory integration (for example, VoiceAI sync):&lt;br /&gt;
&lt;br /&gt;
# SETTINGS → Setup → '''Accountant Permissions''' — grant '''Manage DIDs''' read on the integration accountant's group.&lt;br /&gt;
# SETTINGS → Setup → '''API Permission Groups''' — create or use a group that allows '''dids_get''' read (preset: '''VoiceAI DIDs Reader''').&lt;br /&gt;
# SETTINGS → Users — create or edit an '''accountant''' user; enable '''API restricted''' and assign the API permission group.&lt;br /&gt;
# Enable API globally (SETTINGS → Setup → Settings → '''API''' tab).&lt;br /&gt;
# Authenticate with that accountant's username and '''GUI password''' via &amp;lt;code&amp;gt;/billing/api/v2/authentication/login&amp;lt;/code&amp;gt;; call &amp;lt;code&amp;gt;GET /billing/api/v2/dids&amp;lt;/code&amp;gt; with the returned Bearer token.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Returns ===&lt;br /&gt;
&lt;br /&gt;
'''Success (HTTP 200)'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;dids&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;id&amp;quot;: 6501,&lt;br /&gt;
      &amp;quot;did&amp;quot;: &amp;quot;37066105718&amp;quot;,&lt;br /&gt;
      &amp;quot;did_number&amp;quot;: &amp;quot;37066105718&amp;quot;,&lt;br /&gt;
      &amp;quot;status&amp;quot;: &amp;quot;Active&amp;quot;,&lt;br /&gt;
      &amp;quot;did_status&amp;quot;: &amp;quot;active&amp;quot;,&lt;br /&gt;
      &amp;quot;ai_agent_compatible&amp;quot;: true,&lt;br /&gt;
      &amp;quot;routes_to_openai_project_id&amp;quot;: &amp;quot;proj_xxx&amp;quot;,&lt;br /&gt;
      &amp;quot;updated_at&amp;quot;: &amp;quot;2026-05-27T07:35:57Z&amp;quot;,&lt;br /&gt;
      &amp;quot;owner&amp;quot;: &amp;quot;User Resellers&amp;quot;,&lt;br /&gt;
      &amp;quot;device&amp;quot;: &amp;quot;IAX2/105&amp;quot;,&lt;br /&gt;
      &amp;quot;provider&amp;quot;: &amp;quot;Test Provider&amp;quot;,&lt;br /&gt;
      &amp;quot;dial_plan&amp;quot;: &amp;quot;testDialPlan (authbypin)&amp;quot;,&lt;br /&gt;
      &amp;quot;did_status&amp;quot;: &amp;quot;closed&amp;quot;,&lt;br /&gt;
      &amp;quot;device_id&amp;quot;: 2,&lt;br /&gt;
      &amp;quot;user_id&amp;quot;: 2,&lt;br /&gt;
      &amp;quot;reserved_for_user_till&amp;quot;: &amp;quot;2026-06-09T12:00:00Z&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;from&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;max_results&amp;quot;: 500,&lt;br /&gt;
    &amp;quot;returned&amp;quot;: 42&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''DID object fields'''&lt;br /&gt;
&lt;br /&gt;
* '''id''' — DID record ID in the MOR database&lt;br /&gt;
* '''did''' / '''did_number''' — same DID number string (both returned for compatibility)&lt;br /&gt;
* '''status''' — capitalized GUI label (for example '''Active''')&lt;br /&gt;
* '''did_status''' — lowercase lifecycle value from the database (for example '''free''', '''active''', '''reserved''') — use for machine parsing&lt;br /&gt;
* '''ai_agent_compatible''' — '''true''' or '''false''' when the VoiceAI column exists on the server; omitted when the column is absent&lt;br /&gt;
* '''routes_to_openai_project_id''' — VoiceAI routing target (may be empty)&lt;br /&gt;
* '''updated_at''' — last change in RFC3339 UTC with '''Z''' suffix (for example '''2026-05-27T07:35:57Z'''); omitted when not set. See [[MOR API#Useful to know|Useful to know]] (API values are not reformatted by GUI date settings).&lt;br /&gt;
* '''device_id''' — integer; omitted when not assigned (no positive device ID).&lt;br /&gt;
* '''user_id''' — integer; omitted when not assigned (no positive user ID).&lt;br /&gt;
* '''reserved_for_user_till''' — RFC3339 UTC with '''Z''' when '''did_status''' is '''closed''' and a reservation end time is set; omitted otherwise (same semantics as legacy [[MOR API dids get|dids_get]] XML).&lt;br /&gt;
* '''owner''' — user display name&lt;br /&gt;
* '''device''' — assigned device label&lt;br /&gt;
* '''provider''' — provider name (admin/accountant only)&lt;br /&gt;
* '''dial_plan''' — dial plan name and type (admin/accountant only)&lt;br /&gt;
&lt;br /&gt;
'''meta object'''&lt;br /&gt;
&lt;br /&gt;
* '''from''' — 1-based offset used for this page&lt;br /&gt;
* '''max_results''' — page size requested (&amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; when omitted in the request)&lt;br /&gt;
* '''returned''' — number of DID objects in this response&lt;br /&gt;
&lt;br /&gt;
'''Empty result (HTTP 200)'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;dids&amp;quot;: [],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;from&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;max_results&amp;quot;: null,&lt;br /&gt;
    &amp;quot;returned&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Errors ===&lt;br /&gt;
&lt;br /&gt;
Errors are JSON and HTTP 401 unless noted. The DIDs endpoint uses an '''errors''' string; the login endpoint uses '''error'''.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Condition !! HTTP !! Example body&lt;br /&gt;
|-&lt;br /&gt;
| Invalid or missing JWT || 401 || &amp;lt;code&amp;gt;{&amp;quot;errors&amp;quot;:&amp;quot;Invalid token value&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| API disabled globally || 401 || &amp;lt;code&amp;gt;{&amp;quot;errors&amp;quot;:&amp;quot;API Requests are disabled&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Wrong login password || 401 || &amp;lt;code&amp;gt;{&amp;quot;error&amp;quot;:&amp;quot;unauthorized&amp;quot;}&amp;lt;/code&amp;gt; (login endpoint)&lt;br /&gt;
|-&lt;br /&gt;
| User type not allowed (reseller, simple user) || 401 || &amp;lt;code&amp;gt;{&amp;quot;errors&amp;quot;:&amp;quot;Unauthorized&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Accountant without Manage DIDs read || 401 || &amp;lt;code&amp;gt;{&amp;quot;errors&amp;quot;:&amp;quot;Unauthorized&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| API restricted — '''dids_get''' not permitted || 401 || &amp;lt;code&amp;gt;{&amp;quot;errors&amp;quot;:&amp;quot;API method not permitted: dids_get&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Additional notes ==&lt;br /&gt;
&lt;br /&gt;
* Legacy XML listing remains available via [[MOR API dids get|dids_get]] (API Secret Key + hash). Prefer this v2 endpoint for new integrations.&lt;br /&gt;
* More request/response examples are in &amp;lt;code&amp;gt;/billing/api/v2/api-docs/&amp;lt;/code&amp;gt; under the '''DIDs''' tag.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[MOR API v2]]&lt;br /&gt;
* [[MOR API dids get]] — legacy XML DID listing&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_v2_DIDs&amp;diff=31615</id>
		<title>MOR API v2 DIDs</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_v2_DIDs&amp;diff=31615"/>
		<updated>2026-06-02T10:17:47Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Returns */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;List DIDs via [[MOR API v2]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Documentation ==&lt;br /&gt;
&lt;br /&gt;
Full MOR REST API documentation is available at &amp;lt;code&amp;gt;/billing/api/v2/api-docs/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Description ==&lt;br /&gt;
&lt;br /&gt;
The DIDs API retrieves the list of DIDs visible to the authenticated '''admin''' or '''accountant''' user. Responses are JSON. The same data scope and VoiceAI integration fields as legacy [[MOR API dids get|dids_get]] apply. Authentication follows [[MOR API v2#Usage|Usage]] on the parent page (JWT via Basic login).&lt;br /&gt;
&lt;br /&gt;
Only '''admin''' and '''accountant''' users may call this endpoint. '''Reseller''' and '''simple user''' accounts receive HTTP 401.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== API ==&lt;br /&gt;
&lt;br /&gt;
'''Endpoint:''' &amp;lt;code&amp;gt;GET /billing/api/v2/dids&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Query parameters (all optional):&lt;br /&gt;
&lt;br /&gt;
* '''search_did_number''' — filter by DID number (SQL LIKE partial match)&lt;br /&gt;
* '''search_status''' — lifecycle filter: '''free''', '''reserved''', '''active''', '''closed''', '''terminated''' (lowercase; see '''did_status''' in the response)&lt;br /&gt;
* '''search_hide_terminated_dids''' — '''1''' hide terminated DIDs, '''0''' show&lt;br /&gt;
* '''from''' — '''1-based''' index of the first record to return (pagination; same as legacy '''dids_get''')&lt;br /&gt;
* '''max_results''' — page size. When omitted, the server returns all matching rows (legacy parity). Integrators with large inventories should paginate (for example '''max_results=500''').&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Authentication ===&lt;br /&gt;
&lt;br /&gt;
The DIDs API requires the same authentication as other [[MOR API v2]] endpoints: Basic authentication to obtain a JWT, then a Bearer token on each request. See [[MOR API v2#Usage|Usage]] on the parent page.&lt;br /&gt;
&lt;br /&gt;
'''Basic authentication (login)'''&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;POST /billing/api/v2/authentication/login&amp;lt;/code&amp;gt; with HTTP Authorization header &amp;lt;code&amp;gt;Basic base64(username:password)&amp;lt;/code&amp;gt;. Use the user's '''GUI password''' (the same password as for the MOR web interface), not the global API Secret Key.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
POST http://&amp;amp;lt;SERVER_IP&amp;amp;gt;/billing/api/v2/authentication/login HTTP/1.1&lt;br /&gt;
Authorization: Basic &amp;amp;lt;base64(accountant:password)&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''JWT authentication (list DIDs)'''&amp;lt;br&amp;gt;&lt;br /&gt;
Pass the &amp;lt;code&amp;gt;access_token&amp;lt;/code&amp;gt; from login in the Authorization header. The access token is valid for 15 minutes; use &amp;lt;code&amp;gt;/billing/api/v2/authentication/refresh&amp;lt;/code&amp;gt; before expiry.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GET http://&amp;amp;lt;SERVER_IP&amp;amp;gt;/billing/api/v2/dids?search_status=free&amp;amp;amp;from=1&amp;amp;amp;max_results=500&lt;br /&gt;
Authorization: Bearer &amp;amp;lt;access_token&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Authorization and visibility ===&lt;br /&gt;
&lt;br /&gt;
* '''Accountant''' users need '''Manage DIDs''' read permission on their accountant permission group; otherwise the API returns HTTP 401 with &amp;lt;code&amp;gt;{&amp;quot;errors&amp;quot;:&amp;quot;Unauthorized&amp;quot;}&amp;lt;/code&amp;gt;.&lt;br /&gt;
* When '''API restricted''' is enabled on the user and an API permission group is assigned, the logical method '''dids_get''' must be allowed in that group (for example the '''VoiceAI DIDs Reader''' preset); otherwise the response is HTTP 401 with &amp;lt;code&amp;gt;{&amp;quot;errors&amp;quot;:&amp;quot;API method not permitted: dids_get&amp;quot;}&amp;lt;/code&amp;gt;.&lt;br /&gt;
* '''Admin''' and '''accountant''' (with Manage DIDs) see system-wide DIDs. '''Reseller''' and '''simple user''' are not permitted on this v2 endpoint.&lt;br /&gt;
* Fields such as '''provider''' and '''dial_plan''' are included for admin and accountant responses only.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Integration user setup ===&lt;br /&gt;
&lt;br /&gt;
Typical read-only DID inventory integration (for example, VoiceAI sync):&lt;br /&gt;
&lt;br /&gt;
# SETTINGS → Setup → '''Accountant Permissions''' — grant '''Manage DIDs''' read on the integration accountant's group.&lt;br /&gt;
# SETTINGS → Setup → '''API Permission Groups''' — create or use a group that allows '''dids_get''' read (preset: '''VoiceAI DIDs Reader''').&lt;br /&gt;
# SETTINGS → Users — create or edit an '''accountant''' user; enable '''API restricted''' and assign the API permission group.&lt;br /&gt;
# Enable API globally (SETTINGS → Setup → Settings → '''API''' tab).&lt;br /&gt;
# Authenticate with that accountant's username and '''GUI password''' via &amp;lt;code&amp;gt;/billing/api/v2/authentication/login&amp;lt;/code&amp;gt;; call &amp;lt;code&amp;gt;GET /billing/api/v2/dids&amp;lt;/code&amp;gt; with the returned Bearer token.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Returns ===&lt;br /&gt;
&lt;br /&gt;
'''Success (HTTP 200)'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;dids&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;id&amp;quot;: 6501,&lt;br /&gt;
      &amp;quot;did&amp;quot;: &amp;quot;37066105718&amp;quot;,&lt;br /&gt;
      &amp;quot;did_number&amp;quot;: &amp;quot;37066105718&amp;quot;,&lt;br /&gt;
      &amp;quot;status&amp;quot;: &amp;quot;Active&amp;quot;,&lt;br /&gt;
      &amp;quot;did_status&amp;quot;: &amp;quot;active&amp;quot;,&lt;br /&gt;
      &amp;quot;ai_agent_compatible&amp;quot;: true,&lt;br /&gt;
      &amp;quot;routes_to_openai_project_id&amp;quot;: &amp;quot;proj_xxx&amp;quot;,&lt;br /&gt;
      &amp;quot;updated_at&amp;quot;: &amp;quot;2026-05-27T07:35:57Z&amp;quot;,&lt;br /&gt;
      &amp;quot;owner&amp;quot;: &amp;quot;User Resellers&amp;quot;,&lt;br /&gt;
      &amp;quot;device&amp;quot;: &amp;quot;IAX2/105&amp;quot;,&lt;br /&gt;
      &amp;quot;provider&amp;quot;: &amp;quot;Test Provider&amp;quot;,&lt;br /&gt;
      &amp;quot;dial_plan&amp;quot;: &amp;quot;testDialPlan (authbypin)&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;from&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;max_results&amp;quot;: 500,&lt;br /&gt;
    &amp;quot;returned&amp;quot;: 42&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''DID object fields'''&lt;br /&gt;
&lt;br /&gt;
* '''id''' — DID record ID in the MOR database&lt;br /&gt;
* '''did''' / '''did_number''' — same DID number string (both returned for compatibility)&lt;br /&gt;
* '''status''' — capitalized GUI label (for example '''Active''')&lt;br /&gt;
* '''did_status''' — lowercase lifecycle value from the database (for example '''free''', '''active''', '''reserved''') — use for machine parsing&lt;br /&gt;
* '''ai_agent_compatible''' — '''true''' or '''false''' when the VoiceAI column exists on the server; omitted when the column is absent&lt;br /&gt;
* '''routes_to_openai_project_id''' — VoiceAI routing target (may be empty)&lt;br /&gt;
* '''updated_at''' — last change in RFC3339 UTC with '''Z''' suffix (for example '''2026-05-27T07:35:57Z'''); omitted when not set. See [[MOR API#Useful to know|Useful to know]] (API values are not reformatted by GUI date settings).&lt;br /&gt;
* '''device_id''' — integer; omitted when not assigned (no positive device ID).&lt;br /&gt;
* '''user_id''' — integer; omitted when not assigned (no positive user ID).&lt;br /&gt;
* '''reserved_for_user_till''' — RFC3339 UTC with '''Z''' when '''did_status''' is '''closed''' and a reservation end time is set; omitted otherwise (same semantics as legacy [[MOR API dids get|dids_get]] XML).&lt;br /&gt;
* '''owner''' — user display name&lt;br /&gt;
* '''device''' — assigned device label&lt;br /&gt;
* '''provider''' — provider name (admin/accountant only)&lt;br /&gt;
* '''dial_plan''' — dial plan name and type (admin/accountant only)&lt;br /&gt;
&lt;br /&gt;
'''meta object'''&lt;br /&gt;
&lt;br /&gt;
* '''from''' — 1-based offset used for this page&lt;br /&gt;
* '''max_results''' — page size requested (&amp;lt;code&amp;gt;null&amp;lt;/code&amp;gt; when omitted in the request)&lt;br /&gt;
* '''returned''' — number of DID objects in this response&lt;br /&gt;
&lt;br /&gt;
'''Empty result (HTTP 200)'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;dids&amp;quot;: [],&lt;br /&gt;
  &amp;quot;meta&amp;quot;: {&lt;br /&gt;
    &amp;quot;from&amp;quot;: 1,&lt;br /&gt;
    &amp;quot;max_results&amp;quot;: null,&lt;br /&gt;
    &amp;quot;returned&amp;quot;: 0&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Errors ===&lt;br /&gt;
&lt;br /&gt;
Errors are JSON and HTTP 401 unless noted. The DIDs endpoint uses an '''errors''' string; the login endpoint uses '''error'''.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Condition !! HTTP !! Example body&lt;br /&gt;
|-&lt;br /&gt;
| Invalid or missing JWT || 401 || &amp;lt;code&amp;gt;{&amp;quot;errors&amp;quot;:&amp;quot;Invalid token value&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| API disabled globally || 401 || &amp;lt;code&amp;gt;{&amp;quot;errors&amp;quot;:&amp;quot;API Requests are disabled&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Wrong login password || 401 || &amp;lt;code&amp;gt;{&amp;quot;error&amp;quot;:&amp;quot;unauthorized&amp;quot;}&amp;lt;/code&amp;gt; (login endpoint)&lt;br /&gt;
|-&lt;br /&gt;
| User type not allowed (reseller, simple user) || 401 || &amp;lt;code&amp;gt;{&amp;quot;errors&amp;quot;:&amp;quot;Unauthorized&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| Accountant without Manage DIDs read || 401 || &amp;lt;code&amp;gt;{&amp;quot;errors&amp;quot;:&amp;quot;Unauthorized&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| API restricted — '''dids_get''' not permitted || 401 || &amp;lt;code&amp;gt;{&amp;quot;errors&amp;quot;:&amp;quot;API method not permitted: dids_get&amp;quot;}&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Additional notes ==&lt;br /&gt;
&lt;br /&gt;
* Legacy XML listing remains available via [[MOR API dids get|dids_get]] (API Secret Key + hash). Prefer this v2 endpoint for new integrations.&lt;br /&gt;
* More request/response examples are in &amp;lt;code&amp;gt;/billing/api/v2/api-docs/&amp;lt;/code&amp;gt; under the '''DIDs''' tag.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[MOR API v2]]&lt;br /&gt;
* [[MOR API dids get]] — legacy XML DID listing&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_dids_get&amp;diff=31614</id>
		<title>MOR API dids get</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_dids_get&amp;diff=31614"/>
		<updated>2026-06-02T10:17:10Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Returns */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''List DIDs via the [[MOR API]].''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
[[MOR API]] DIDs get — list DIDs matching search filters. Returns XML (or HTML when '''test=1''').&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
* '''Call (recommended):''' POST to &amp;lt;code&amp;gt;/billing/api/&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;action=dids_get&amp;lt;/code&amp;gt; (same as other [[MOR API]] methods).&lt;br /&gt;
* '''Alternate URL:''' &amp;lt;code&amp;gt;/billing/api/dids_get&amp;lt;/code&amp;gt; — may work depending on server routing; prefer the main API endpoint above.&lt;br /&gt;
* '''Methods:''' POST (recommended), GET (if allowed in MOR Settings — not recommended).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
===Parametres===&lt;br /&gt;
&lt;br /&gt;
'''Required on every call'''&lt;br /&gt;
&lt;br /&gt;
* '''[[MOR API hash construction | hash]]''' — SHA1 hash constructed using '''API_Secret_Key''' ([[MOR API hash construction | more in Constructing hash]]). '''Required'''.&lt;br /&gt;
* '''u''' — username for authentication. '''Required'''.&lt;br /&gt;
&lt;br /&gt;
'''Search and pagination (not included in the hash)'''&lt;br /&gt;
&lt;br /&gt;
The following parameters are '''not''' concatenated into the hash string. For a typical request with only '''u''' and search filters, the hash is built from the API Secret Key alone (no search parameter values are added). See [[MOR API hash construction | Constructing hash]] for hash-listed parameters on other actions.&lt;br /&gt;
&lt;br /&gt;
* '''search_did_number''' — DID number (partial match)&lt;br /&gt;
* '''search_status''' — lifecycle filter: '''free''', '''reserved''', '''active''', '''closed''', '''terminated''' (lowercase in the request; see '''did_status''' in the response)&lt;br /&gt;
* '''search_did_owner''' — owner display name (admin / accountant)&lt;br /&gt;
* '''search_dialplan''' — dialplan id&lt;br /&gt;
* '''search_user''' — user id&lt;br /&gt;
* '''search_device''' — device id&lt;br /&gt;
* '''search_provider''' — provider id (admin / accountant, or reseller with own providers)&lt;br /&gt;
* '''search_language''' — language configured on the DID; use '''all''' to disable this filter (default when omitted)&lt;br /&gt;
* '''search_hide_terminated_dids''' — '''1''' hide terminated DIDs, '''0''' show&lt;br /&gt;
* '''from''' — '''1-based''' index of the first record to return (pagination)&lt;br /&gt;
* '''max_results''' — maximum number of records to return&lt;br /&gt;
&lt;br /&gt;
'''Optional test flag'''&lt;br /&gt;
&lt;br /&gt;
* '''test''' — '''1''' renders the response in the browser for debugging (same as other API methods)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
===Authorization and visibility===&lt;br /&gt;
&lt;br /&gt;
* The caller is identified by '''u=''' only; the hash does not bind a different user identity.&lt;br /&gt;
* '''Accountant''' users need '''Manage DIDs''' read permission on their accountant group; otherwise the API returns '''You are not authorized to manage DIDs'''.&lt;br /&gt;
* When '''API restricted''' is enabled on the user (user edit form) and an API permission group is assigned, '''dids_get''' must be allowed in that group; otherwise the response is '''API method not permitted: dids_get'''.&lt;br /&gt;
* '''Admin''' and '''accountant''' (with Manage DIDs) see system-wide DIDs; '''reseller''' sees reseller-scoped rows; '''user''' sees only their own DIDs.&lt;br /&gt;
* Fields such as '''provider''', '''dial_plan''', and '''tone_zone''' may be omitted for '''user''' and/or '''reseller''' responses — do not assume every element in the admin example below is present for all roles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
===Request===&lt;br /&gt;
&lt;br /&gt;
Example: &amp;lt;code&amp;gt;search_status=free&amp;lt;/code&amp;gt;, API Secret Key = &amp;lt;code&amp;gt;secret&amp;lt;/code&amp;gt;, hash computed per [[MOR API hash construction | Constructing hash]] (search parameters are '''not''' part of the hash).&lt;br /&gt;
&lt;br /&gt;
We send (recommended):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
POST http://&amp;amp;lt;SERVER_IP&amp;amp;gt;/billing/api/?u=admin&amp;amp;amp;action=dids_get&amp;amp;amp;search_status=free&amp;amp;amp;hash=6e79d4a82f68102f43be11d873177f47817f84df&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the same parameters, the matching free DIDs appear in the GUI DIDs list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
===Returns===&lt;br /&gt;
&lt;br /&gt;
'''Success'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;page&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;dids&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;did&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;did&amp;amp;gt;37066xxxxxx&amp;amp;lt;/did&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;did_number&amp;amp;gt;37066xxxxxx&amp;amp;lt;/did_number&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;provider&amp;amp;gt;Test Provider&amp;amp;lt;/provider&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;language&amp;amp;gt;language&amp;amp;lt;/language&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;status&amp;amp;gt;Active&amp;amp;lt;/status&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;did_status&amp;amp;gt;active&amp;amp;lt;/did_status&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;ai_agent_compatible&amp;amp;gt;true&amp;amp;lt;/ai_agent_compatible&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;routes_to_openai_project_id&amp;amp;gt;&amp;amp;lt;/routes_to_openai_project_id&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;updated_at&amp;amp;gt;2026-05-27T07:35:57Z&amp;amp;lt;/updated_at&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;reseller&amp;amp;gt;Test Reseller&amp;amp;lt;/reseller&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;owner&amp;amp;gt;User Resellers&amp;amp;lt;/owner&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;device&amp;amp;gt;IAX2/105&amp;amp;lt;/device&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;dial_plan&amp;amp;gt;&amp;amp;lt;/dial_plan&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;simultaneous_call_limit&amp;amp;gt;Unlimited&amp;amp;lt;/simultaneous_call_limit&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;tone_zone&amp;amp;gt;it&amp;amp;lt;/tone_zone&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;id&amp;amp;gt;6501&amp;amp;lt;/id&amp;amp;gt;&lt;br /&gt;
      &amp;lt;did_status&amp;gt;closed&amp;lt;/did_status&amp;gt;&lt;br /&gt;
      &amp;lt;device_id&amp;gt;2&amp;lt;/device_id&amp;gt;&lt;br /&gt;
      &amp;lt;user_id&amp;gt;2&amp;lt;/user_id&amp;gt;&lt;br /&gt;
      &amp;lt;reserved_for_user_till&amp;gt;2026-06-09T12:00:00Z&amp;lt;/reserved_for_user_till&amp;gt;&lt;br /&gt;
    &amp;amp;lt;/did&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;did&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;did&amp;amp;gt;37066xxxxxx&amp;amp;lt;/did&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;did_number&amp;amp;gt;37066xxxxxx&amp;amp;lt;/did_number&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;provider&amp;amp;gt;Test Provider&amp;amp;lt;/provider&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;language&amp;amp;gt;&amp;amp;lt;/language&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;status&amp;amp;gt;Active&amp;amp;lt;/status&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;did_status&amp;amp;gt;active&amp;amp;lt;/did_status&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;reseller&amp;amp;gt;Test Reseller&amp;amp;lt;/reseller&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;device&amp;amp;gt;&amp;amp;lt;/device&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;dial_plan&amp;amp;gt;testDialPlan (authbypin)&amp;amp;lt;/dial_plan&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;simultaneous_call_limit&amp;amp;gt;Unlimited&amp;amp;lt;/simultaneous_call_limit&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;tone_zone&amp;amp;gt;&amp;amp;lt;/tone_zone&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;id&amp;amp;gt;6502&amp;amp;lt;/id&amp;amp;gt;&lt;br /&gt;
      &amp;lt;did_status&amp;gt;closed&amp;lt;/did_status&amp;gt;&lt;br /&gt;
      &amp;lt;device_id&amp;gt;2&amp;lt;/device_id&amp;gt;&lt;br /&gt;
      &amp;lt;user_id&amp;gt;2&amp;lt;/user_id&amp;gt;&lt;br /&gt;
      &amp;lt;reserved_for_user_till&amp;gt;2026-06-09T12:00:00Z&amp;lt;/reserved_for_user_till&amp;gt;&lt;br /&gt;
    &amp;amp;lt;/did&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;/dids&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/page&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Integration elements (inside each &amp;amp;lt;did&amp;amp;gt;)'''&lt;br /&gt;
&lt;br /&gt;
* '''did_number''' — same value as '''did''' (returned for compatibility)&lt;br /&gt;
* '''did_status''' — lowercase lifecycle from the database (e.g. '''free''', '''active''', '''reserved''') — use for machine parsing&lt;br /&gt;
* '''status''' — capitalized label for the GUI (e.g. '''Active''') — same row, human-oriented display&lt;br /&gt;
* '''ai_agent_compatible''' — '''true''' or '''false''' when the column exists; omitted when the column is not on the server&lt;br /&gt;
* '''routes_to_openai_project_id''' — VoiceAI routing target (may be empty)&lt;br /&gt;
* '''updated_at''' — last change in '''RFC3339 UTC''' with '''Z''' suffix (e.g. '''2026-05-27T07:35:57Z'''); omitted when not set. Fixed wire format for integrators — not the phpMyAdmin '''YYYY-MM-DD HH:MM:SS''' display string. See [[MOR API#Useful to know|Useful to know]] (API values are not reformatted by GUI date settings).&lt;br /&gt;
* '''device_id''' — numeric ID of the device the DID is assigned to; omitted when there is no device assignment (same rule as [[MOR API v2 DIDs]] JSON).&lt;br /&gt;
* '''user_id''' — numeric ID of the end user the DID is assigned to; omitted when there is no user assignment.&lt;br /&gt;
* '''reserved_for_user_till''' — when '''did_status''' is '''closed''', the date and time until the DID stays reserved for the user (RFC3339 UTC with '''Z''' suffix, for example 2026-06-09T12:00:00Z); omitted for '''free''', '''active''', '''reserved''', and '''terminated''' rows. Matches the '''Reserved for user till''' line on the DID edit screen in the GUI.&lt;br /&gt;
&lt;br /&gt;
Other elements ('''comment''', '''reseller''', etc.) follow the same rules as the DIDs GUI for the authenticated role.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Errors'''&lt;br /&gt;
&lt;br /&gt;
* '''Incorrect hash''' — Hash was not correct. Check '''API_Secret_Key''' and parameter order while concatenating the hash string.&lt;br /&gt;
* '''Access Denied''' — User for '''u=''' not found, or invalid authentication.&lt;br /&gt;
* '''You are not authorized to manage DIDs''' — Accountant without '''Manage DIDs''' read on the accountant group.&lt;br /&gt;
* '''API method not permitted: dids_get''' — User has '''API restricted''' and the assigned permission group does not allow '''dids_get'''.&lt;br /&gt;
* '''No DIDs found''' — No DIDs matched the filters.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;page&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;error&amp;amp;gt;Error message&amp;amp;lt;/error&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/page&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=See also=&lt;br /&gt;
&lt;br /&gt;
* [[MOR API]]&lt;br /&gt;
* [[MOR API v2 DIDs]] — JSON DID listing: '''GET /billing/api/v2/dids'''&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=MOR_API_dids_get&amp;diff=31613</id>
		<title>MOR API dids get</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=MOR_API_dids_get&amp;diff=31613"/>
		<updated>2026-06-02T10:15:59Z</updated>

		<summary type="html">&lt;p&gt;Admin: /* Returns */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;''List DIDs via the [[MOR API]].''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=Description=&lt;br /&gt;
&lt;br /&gt;
[[MOR API]] DIDs get — list DIDs matching search filters. Returns XML (or HTML when '''test=1''').&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=Usage=&lt;br /&gt;
&lt;br /&gt;
* '''Call (recommended):''' POST to &amp;lt;code&amp;gt;/billing/api/&amp;lt;/code&amp;gt; with &amp;lt;code&amp;gt;action=dids_get&amp;lt;/code&amp;gt; (same as other [[MOR API]] methods).&lt;br /&gt;
* '''Alternate URL:''' &amp;lt;code&amp;gt;/billing/api/dids_get&amp;lt;/code&amp;gt; — may work depending on server routing; prefer the main API endpoint above.&lt;br /&gt;
* '''Methods:''' POST (recommended), GET (if allowed in MOR Settings — not recommended).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
===Parametres===&lt;br /&gt;
&lt;br /&gt;
'''Required on every call'''&lt;br /&gt;
&lt;br /&gt;
* '''[[MOR API hash construction | hash]]''' — SHA1 hash constructed using '''API_Secret_Key''' ([[MOR API hash construction | more in Constructing hash]]). '''Required'''.&lt;br /&gt;
* '''u''' — username for authentication. '''Required'''.&lt;br /&gt;
&lt;br /&gt;
'''Search and pagination (not included in the hash)'''&lt;br /&gt;
&lt;br /&gt;
The following parameters are '''not''' concatenated into the hash string. For a typical request with only '''u''' and search filters, the hash is built from the API Secret Key alone (no search parameter values are added). See [[MOR API hash construction | Constructing hash]] for hash-listed parameters on other actions.&lt;br /&gt;
&lt;br /&gt;
* '''search_did_number''' — DID number (partial match)&lt;br /&gt;
* '''search_status''' — lifecycle filter: '''free''', '''reserved''', '''active''', '''closed''', '''terminated''' (lowercase in the request; see '''did_status''' in the response)&lt;br /&gt;
* '''search_did_owner''' — owner display name (admin / accountant)&lt;br /&gt;
* '''search_dialplan''' — dialplan id&lt;br /&gt;
* '''search_user''' — user id&lt;br /&gt;
* '''search_device''' — device id&lt;br /&gt;
* '''search_provider''' — provider id (admin / accountant, or reseller with own providers)&lt;br /&gt;
* '''search_language''' — language configured on the DID; use '''all''' to disable this filter (default when omitted)&lt;br /&gt;
* '''search_hide_terminated_dids''' — '''1''' hide terminated DIDs, '''0''' show&lt;br /&gt;
* '''from''' — '''1-based''' index of the first record to return (pagination)&lt;br /&gt;
* '''max_results''' — maximum number of records to return&lt;br /&gt;
&lt;br /&gt;
'''Optional test flag'''&lt;br /&gt;
&lt;br /&gt;
* '''test''' — '''1''' renders the response in the browser for debugging (same as other API methods)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
===Authorization and visibility===&lt;br /&gt;
&lt;br /&gt;
* The caller is identified by '''u=''' only; the hash does not bind a different user identity.&lt;br /&gt;
* '''Accountant''' users need '''Manage DIDs''' read permission on their accountant group; otherwise the API returns '''You are not authorized to manage DIDs'''.&lt;br /&gt;
* When '''API restricted''' is enabled on the user (user edit form) and an API permission group is assigned, '''dids_get''' must be allowed in that group; otherwise the response is '''API method not permitted: dids_get'''.&lt;br /&gt;
* '''Admin''' and '''accountant''' (with Manage DIDs) see system-wide DIDs; '''reseller''' sees reseller-scoped rows; '''user''' sees only their own DIDs.&lt;br /&gt;
* Fields such as '''provider''', '''dial_plan''', and '''tone_zone''' may be omitted for '''user''' and/or '''reseller''' responses — do not assume every element in the admin example below is present for all roles.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
===Request===&lt;br /&gt;
&lt;br /&gt;
Example: &amp;lt;code&amp;gt;search_status=free&amp;lt;/code&amp;gt;, API Secret Key = &amp;lt;code&amp;gt;secret&amp;lt;/code&amp;gt;, hash computed per [[MOR API hash construction | Constructing hash]] (search parameters are '''not''' part of the hash).&lt;br /&gt;
&lt;br /&gt;
We send (recommended):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
POST http://&amp;amp;lt;SERVER_IP&amp;amp;gt;/billing/api/?u=admin&amp;amp;amp;action=dids_get&amp;amp;amp;search_status=free&amp;amp;amp;hash=6e79d4a82f68102f43be11d873177f47817f84df&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With the same parameters, the matching free DIDs appear in the GUI DIDs list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
===Returns===&lt;br /&gt;
&lt;br /&gt;
'''Success'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;page&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;dids&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;did&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;did&amp;amp;gt;37066xxxxxx&amp;amp;lt;/did&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;did_number&amp;amp;gt;37066xxxxxx&amp;amp;lt;/did_number&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;provider&amp;amp;gt;Test Provider&amp;amp;lt;/provider&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;language&amp;amp;gt;language&amp;amp;lt;/language&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;status&amp;amp;gt;Active&amp;amp;lt;/status&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;did_status&amp;amp;gt;active&amp;amp;lt;/did_status&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;ai_agent_compatible&amp;amp;gt;true&amp;amp;lt;/ai_agent_compatible&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;routes_to_openai_project_id&amp;amp;gt;&amp;amp;lt;/routes_to_openai_project_id&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;updated_at&amp;amp;gt;2026-05-27T07:35:57Z&amp;amp;lt;/updated_at&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;reseller&amp;amp;gt;Test Reseller&amp;amp;lt;/reseller&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;owner&amp;amp;gt;User Resellers&amp;amp;lt;/owner&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;device&amp;amp;gt;IAX2/105&amp;amp;lt;/device&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;dial_plan&amp;amp;gt;&amp;amp;lt;/dial_plan&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;simultaneous_call_limit&amp;amp;gt;Unlimited&amp;amp;lt;/simultaneous_call_limit&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;tone_zone&amp;amp;gt;it&amp;amp;lt;/tone_zone&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;id&amp;amp;gt;6501&amp;amp;lt;/id&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;/did&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;did&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;did&amp;amp;gt;37066xxxxxx&amp;amp;lt;/did&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;did_number&amp;amp;gt;37066xxxxxx&amp;amp;lt;/did_number&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;provider&amp;amp;gt;Test Provider&amp;amp;lt;/provider&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;language&amp;amp;gt;&amp;amp;lt;/language&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;status&amp;amp;gt;Active&amp;amp;lt;/status&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;did_status&amp;amp;gt;active&amp;amp;lt;/did_status&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;reseller&amp;amp;gt;Test Reseller&amp;amp;lt;/reseller&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;device&amp;amp;gt;&amp;amp;lt;/device&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;dial_plan&amp;amp;gt;testDialPlan (authbypin)&amp;amp;lt;/dial_plan&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;simultaneous_call_limit&amp;amp;gt;Unlimited&amp;amp;lt;/simultaneous_call_limit&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;tone_zone&amp;amp;gt;&amp;amp;lt;/tone_zone&amp;amp;gt;&lt;br /&gt;
      &amp;amp;lt;id&amp;amp;gt;6502&amp;amp;lt;/id&amp;amp;gt;&lt;br /&gt;
    &amp;amp;lt;/did&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;/dids&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/page&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Integration elements (inside each &amp;amp;lt;did&amp;amp;gt;)'''&lt;br /&gt;
&lt;br /&gt;
* '''did_number''' — same value as '''did''' (returned for compatibility)&lt;br /&gt;
* '''did_status''' — lowercase lifecycle from the database (e.g. '''free''', '''active''', '''reserved''') — use for machine parsing&lt;br /&gt;
* '''status''' — capitalized label for the GUI (e.g. '''Active''') — same row, human-oriented display&lt;br /&gt;
* '''ai_agent_compatible''' — '''true''' or '''false''' when the column exists; omitted when the column is not on the server&lt;br /&gt;
* '''routes_to_openai_project_id''' — VoiceAI routing target (may be empty)&lt;br /&gt;
* '''updated_at''' — last change in '''RFC3339 UTC''' with '''Z''' suffix (e.g. '''2026-05-27T07:35:57Z'''); omitted when not set. Fixed wire format for integrators — not the phpMyAdmin '''YYYY-MM-DD HH:MM:SS''' display string. See [[MOR API#Useful to know|Useful to know]] (API values are not reformatted by GUI date settings).&lt;br /&gt;
* '''device_id''' — numeric ID of the device the DID is assigned to; omitted when there is no device assignment (same rule as [[MOR API v2 DIDs]] JSON).&lt;br /&gt;
* '''user_id''' — numeric ID of the end user the DID is assigned to; omitted when there is no user assignment.&lt;br /&gt;
* '''reserved_for_user_till''' — when '''did_status''' is '''closed''', the date and time until the DID stays reserved for the user (RFC3339 UTC with '''Z''' suffix, for example 2026-06-09T12:00:00Z); omitted for '''free''', '''active''', '''reserved''', and '''terminated''' rows. Matches the '''Reserved for user till''' line on the DID edit screen in the GUI.&lt;br /&gt;
&lt;br /&gt;
Other elements ('''comment''', '''reseller''', etc.) follow the same rules as the DIDs GUI for the authenticated role.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
'''Errors'''&lt;br /&gt;
&lt;br /&gt;
* '''Incorrect hash''' — Hash was not correct. Check '''API_Secret_Key''' and parameter order while concatenating the hash string.&lt;br /&gt;
* '''Access Denied''' — User for '''u=''' not found, or invalid authentication.&lt;br /&gt;
* '''You are not authorized to manage DIDs''' — Accountant without '''Manage DIDs''' read on the accountant group.&lt;br /&gt;
* '''API method not permitted: dids_get''' — User has '''API restricted''' and the assigned permission group does not allow '''dids_get'''.&lt;br /&gt;
* '''No DIDs found''' — No DIDs matched the filters.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;page&amp;amp;gt;&lt;br /&gt;
  &amp;amp;lt;error&amp;amp;gt;Error message&amp;amp;lt;/error&amp;amp;gt;&lt;br /&gt;
&amp;amp;lt;/page&amp;amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=See also=&lt;br /&gt;
&lt;br /&gt;
* [[MOR API]]&lt;br /&gt;
* [[MOR API v2 DIDs]] — JSON DID listing: '''GET /billing/api/v2/dids'''&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=Wholesale_Tariff&amp;diff=31612</id>
		<title>Wholesale Tariff</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=Wholesale_Tariff&amp;diff=31612"/>
		<updated>2026-06-02T08:22:52Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=What is a Wholesale Tariff?=&lt;br /&gt;
&lt;br /&gt;
This tariff is a price list which you get from your provider, later you can transform this tariff into retail or user wholesale tariffs. Without a transformation this tariff cannot be assigned to user.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Min Time = &lt;br /&gt;
&lt;br /&gt;
Min(imal) Time is the minimum time that will be billed if a call is answered.&lt;br /&gt;
&lt;br /&gt;
For example: &lt;br /&gt;
&lt;br /&gt;
* Min Time = 10s&lt;br /&gt;
* If the actual length of a call is &amp;lt;= 10s, billsec = 10.&lt;br /&gt;
* If the actual length of a call is &amp;gt; 10s, then billsec = actual call length.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
| '''Actual call length''' || '''Call time which will be billed'''&lt;br /&gt;
|- &lt;br /&gt;
| 1 || 10&lt;br /&gt;
|- &lt;br /&gt;
| 2 || 10&lt;br /&gt;
|- &lt;br /&gt;
| ... || 10&lt;br /&gt;
|- &lt;br /&gt;
| 9 || 10&lt;br /&gt;
|- &lt;br /&gt;
| 10 || 10&lt;br /&gt;
|- &lt;br /&gt;
| 11 || 11&lt;br /&gt;
|- &lt;br /&gt;
| 12 || 12&lt;br /&gt;
|- &lt;br /&gt;
| ... || ...&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Increment =&lt;br /&gt;
&lt;br /&gt;
An Increment is the amount of time in which a call is billed. It is counted in seconds.&lt;br /&gt;
&lt;br /&gt;
For example, assume that:&lt;br /&gt;
&lt;br /&gt;
* A particular call lasts for 15 seconds.&lt;br /&gt;
* The rate for 1 min is (for the sake of simplicity) 1 EUR/min.&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
&lt;br /&gt;
* If the increment is 1, then the call length will be counted as 15s and the call price will be 0.25 EUR (1/60*15). As the increment is 1, the call can be 1, 2, 3... in length. 15s is the exact length of the call.&lt;br /&gt;
* If the increment is 10, then the call length will be counted as 20s and the call price will be 0.333 EUR (1/60*20). As the increment is 10, the call can be 10, 20, 30... in length. 20s is nearest to 15.&lt;br /&gt;
* If the increment is 20, then the call length will be counted as 20s and the call price will be 0.333 EUR (1/60*20). As the increment is 20, the call can be 20, 40, 60... in length. 20s is nearest to 15.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Make Wholesale Tariff =&lt;br /&gt;
&lt;br /&gt;
'''Make Wholesale Tariff''' builds a new wholesale tariff from an existing one: rates are copied and your amount/percent markups are applied. When the source tariff has rates with '''CLI Groups''' (CLI prefixes per destination), those prefixes are carried to the new tariff. For what CLI Groups are and how rating uses them, see [[CLI Groups - CLI Prefixes]].&lt;br /&gt;
&lt;br /&gt;
'''Menu path:''' '''SETTINGS → Billing → [[Tariffs]]''' → select a tariff → '''Make Wholesale Tariff'''.&lt;br /&gt;
&lt;br /&gt;
'''CLI Groups on the form'''&amp;lt;br&amp;gt;&lt;br /&gt;
Before you choose the wholesale tariff type and click '''Make Tariff''', the form shows a '''CLI Groups''' choice:&lt;br /&gt;
&lt;br /&gt;
* '''Copy CLI Groups''' (default) — the new tariff gets its own CLI Group copies. Editing CLI prefixes on the new tariff does not change the source tariff.&lt;br /&gt;
* '''Reuse CLI Groups''' — new rates point to the same CLI Group records as the source tariff. Changing prefixes on one tariff can affect the other.&lt;br /&gt;
&lt;br /&gt;
Use '''Copy''' when you mark up a supplier tariff for resale and need isolated prefix lists. Use '''Reuse''' only when you intentionally want shared CLI Groups between the source and the new tariff.&lt;br /&gt;
&lt;br /&gt;
If the source tariff has no CLI Groups on its rates, this section has no effect — the new tariff is created as before.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= See also = &lt;br /&gt;
* [[MOR_Manual#Tariffs | Tariffs]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=Tariff_Transformation&amp;diff=31611</id>
		<title>Tariff Transformation</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=Tariff_Transformation&amp;diff=31611"/>
		<updated>2026-06-02T08:19:29Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wholesale tariffs can be transformed to user retail tariffs. This can be done in the main tariffs window by clicking on [[Image:application_add.png ]] '''Make user retail tariff''' or [[Image:application_add.png ]] '''Make wholesale Tariff''' (these links appear when a tariff has at least one rate):&lt;br /&gt;
&lt;br /&gt;
[[Image:tarifftransformation1.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enter the values you want to add to change from a wholesale tariff to a retail tariff. Let's say X is the wholesale rate. There are three possible ways of making the change:&lt;br /&gt;
&lt;br /&gt;
 1. Enter value Y into the '''Add amount''' field. The retail rate will be X + Y.&lt;br /&gt;
&lt;br /&gt;
 2. Enter value Z into the '''Add percent''' field. The retail rate will be X + (X/100 * Z).&lt;br /&gt;
&lt;br /&gt;
 3. Enter value Y into the '''Add amount''' field AND Z into '''Add percent''' field. The retail rate will be (X + Y) + ((X + Y) / 100 * Z).&lt;br /&gt;
&lt;br /&gt;
'''NOTE''': When  performing this transformation, the largest value from the wholesale tariff is taken for the Destination group in the retail tariff (by prefix). For a more detailed explanation, check [[Make Retail Tariff from Wholesale Tariff explained | here]].&lt;br /&gt;
&lt;br /&gt;
'''HINT''': This function can be used when importing a user retail tariff. First you create a fake wholesale Tariff, then import Rates into it, and finally transform to the user retail Tariff with values 0/0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Make Wholesale Tariff ==&lt;br /&gt;
&lt;br /&gt;
'''Make Wholesale Tariff''' builds a new wholesale tariff from an existing one: rates are copied and your amount/percent markups are applied. When the source tariff has rates with '''CLI Groups''' (CLI prefixes per destination), those prefixes are carried to the new tariff. For what CLI Groups are and how rating uses them, see [[CLI Groups - CLI Prefixes]].&lt;br /&gt;
&lt;br /&gt;
'''Menu path:''' '''SETTINGS → Billing → [[Tariffs]]''' → select a tariff → '''Make Wholesale Tariff'''.&lt;br /&gt;
&lt;br /&gt;
'''CLI Groups on the form'''&amp;lt;br&amp;gt;&lt;br /&gt;
Before you choose the wholesale tariff type and click '''Make Tariff''', the form shows a '''CLI Groups''' choice:&lt;br /&gt;
&lt;br /&gt;
* '''Copy CLI Groups''' (default) — the new tariff gets its own CLI Group copies. Editing CLI prefixes on the new tariff does not change the source tariff.&lt;br /&gt;
* '''Reuse CLI Groups''' — new rates point to the same CLI Group records as the source tariff. Changing prefixes on one tariff can affect the other.&lt;br /&gt;
&lt;br /&gt;
Use '''Copy''' when you mark up a supplier tariff for resale and need isolated prefix lists. Use '''Reuse''' only when you intentionally want shared CLI Groups between the source and the new tariff.&lt;br /&gt;
&lt;br /&gt;
If the source tariff has no CLI Groups on its rates, this section has no effect — the new tariff is created as before.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=See also=&lt;br /&gt;
* [[Make Retail Tariff from Wholesale Tariff explained]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://wiki.kolmisoft.com/index.php?title=Wholesale_Tariff&amp;diff=31610</id>
		<title>Wholesale Tariff</title>
		<link rel="alternate" type="text/html" href="https://wiki.kolmisoft.com/index.php?title=Wholesale_Tariff&amp;diff=31610"/>
		<updated>2026-06-02T08:18:52Z</updated>

		<summary type="html">&lt;p&gt;Admin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=What is a Wholesale Tariff?=&lt;br /&gt;
&lt;br /&gt;
This tariff is a price list which you get from your provider, later you can transform this tariff into retail or user wholesale tariffs. Without a transformation this tariff cannot be assigned to user.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Min Time = &lt;br /&gt;
&lt;br /&gt;
Min(imal) Time is the minimum time that will be billed if a call is answered.&lt;br /&gt;
&lt;br /&gt;
For example: &lt;br /&gt;
&lt;br /&gt;
* Min Time = 10s&lt;br /&gt;
* If the actual length of a call is &amp;lt;= 10s, billsec = 10.&lt;br /&gt;
* If the actual length of a call is &amp;gt; 10s, then billsec = actual call length.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; &lt;br /&gt;
| '''Actual call length''' || '''Call time which will be billed'''&lt;br /&gt;
|- &lt;br /&gt;
| 1 || 10&lt;br /&gt;
|- &lt;br /&gt;
| 2 || 10&lt;br /&gt;
|- &lt;br /&gt;
| ... || 10&lt;br /&gt;
|- &lt;br /&gt;
| 9 || 10&lt;br /&gt;
|- &lt;br /&gt;
| 10 || 10&lt;br /&gt;
|- &lt;br /&gt;
| 11 || 11&lt;br /&gt;
|- &lt;br /&gt;
| 12 || 12&lt;br /&gt;
|- &lt;br /&gt;
| ... || ...&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
= Increment =&lt;br /&gt;
&lt;br /&gt;
An Increment is the amount of time in which a call is billed. It is counted in seconds.&lt;br /&gt;
&lt;br /&gt;
For example, assume that:&lt;br /&gt;
&lt;br /&gt;
* A particular call lasts for 15 seconds.&lt;br /&gt;
* The rate for 1 min is (for the sake of simplicity) 1 EUR/min.&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
&lt;br /&gt;
* If the increment is 1, then the call length will be counted as 15s and the call price will be 0.25 EUR (1/60*15). As the increment is 1, the call can be 1, 2, 3... in length. 15s is the exact length of the call.&lt;br /&gt;
* If the increment is 10, then the call length will be counted as 20s and the call price will be 0.333 EUR (1/60*20). As the increment is 10, the call can be 10, 20, 30... in length. 20s is nearest to 15.&lt;br /&gt;
* If the increment is 20, then the call length will be counted as 20s and the call price will be 0.333 EUR (1/60*20). As the increment is 20, the call can be 20, 40, 60... in length. 20s is nearest to 15.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
== Make Wholesale Tariff ==&lt;br /&gt;
&lt;br /&gt;
'''Make Wholesale Tariff''' builds a new wholesale tariff from an existing one: rates are copied and your amount/percent markups are applied. When the source tariff has rates with '''CLI Groups''' (CLI prefixes per destination), those prefixes are carried to the new tariff. For what CLI Groups are and how rating uses them, see [[CLI Groups - CLI Prefixes]].&lt;br /&gt;
&lt;br /&gt;
'''Menu path:''' '''SETTINGS → Billing → [[Tariffs]]''' → select a tariff → '''Make Wholesale Tariff'''.&lt;br /&gt;
&lt;br /&gt;
'''CLI Groups on the form'''&amp;lt;br&amp;gt;&lt;br /&gt;
Before you choose the wholesale tariff type and click '''Make Tariff''', the form shows a '''CLI Groups''' choice:&lt;br /&gt;
&lt;br /&gt;
* '''Copy CLI Groups''' (default) — the new tariff gets its own CLI Group copies. Editing CLI prefixes on the new tariff does not change the source tariff.&lt;br /&gt;
* '''Reuse CLI Groups''' — new rates point to the same CLI Group records as the source tariff. Changing prefixes on one tariff can affect the other.&lt;br /&gt;
&lt;br /&gt;
Use '''Copy''' when you mark up a supplier tariff for resale and need isolated prefix lists. Use '''Reuse''' only when you intentionally want shared CLI Groups between the source and the new tariff.&lt;br /&gt;
&lt;br /&gt;
If the source tariff has no CLI Groups on its rates, this section has no effect — the new tariff is created as before.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= See also = &lt;br /&gt;
* [[MOR_Manual#Tariffs | Tariffs]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>