NAV -image
bash javascript

Introduction

URL Networks API

This documentation aims to provide all the information you need to work with our API.

Base URL

https://dashboard.url.net.au

Authenticating requests

To authenticate requests, include an Authorization header with the value "Bearer {YOUR_AUTH_KEY}".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

You can retrieve your token by visiting your dashboard and clicking Generate API token.

Billing

Outgoing Call Charges.

requires authentication

List all outgoing call charges for the service the API is using.

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/billing/calls/outgoing/2017-01-01 00:00:00/2017-06-01 00:00:00" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/billing/calls/outgoing/2017-01-01 00:00:00/2017-06-01 00:00:00"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

[
    {
        "unique_id": 1001,
        "service_id": 100,
        "external_did": null,
        "from": "61312345678",
        "to": "61398765432",
        "charge": 0.25,
        "start_time": "2017-01-01 09:00:00",
        "end_time": "2017-01-01 09:05:00",
        "seconds": 300,
        "auth_code": null,
        "hangup_cause": "NORMAL_CLEARING",
        "on_net": 0,
        "call_rate_prefix": "61",
        "call_rate_name": "Australia Mobile",
        "transferred_call": false,
        "uuid": "c1f2e3d4-0000-0000-0000-000000000000",
        "parent_uuid": null
    }
]

Request      

GET api/v1/billing/calls/outgoing/{start_date}/{end_date}

URL Parameters

start_date  string  
Start date for the records YYYY-MM-DD HH:MM:SS (urlencoded).

end_date  string  
End date for the records YYYY-MM-DD HH:MM:SS (urlencoded).

Collection Charges.

requires authentication

List all collection call charges for a service id.

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/billing/calls/collection/2017-01-01 00:00:00/2017-06-01 00:00:00" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/billing/calls/collection/2017-01-01 00:00:00/2017-06-01 00:00:00"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

[
    {
        "unique_id": 1001,
        "service_id": 100,
        "external_did": null,
        "from": "61312345678",
        "to": "61398765432",
        "charge": 0.15,
        "start_time": "2017-01-01 09:00:00",
        "end_time": "2017-01-01 09:05:00",
        "seconds": 300,
        "auth_code": null,
        "hangup_cause": "NORMAL_CLEARING",
        "on_net": 0,
        "call_rate_prefix": "613",
        "call_rate_name": "Australia Local"
    }
]

Request      

GET api/v1/billing/calls/collection/{start_date}/{end_date}

URL Parameters

start_date  string  
Start date for the records YYYY-MM-DD HH:MM:SS (urlencoded).

end_date  string  
End date for the records YYYY-MM-DD HH:MM:SS (urlencoded).

Order Numbers

List localities.

requires authentication

List all available localities.

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/order-numbers/locality/AU" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/order-numbers/locality/AU"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "locality": "Melbourne (03)",
    "prefix": 3
}

Request      

GET api/v1/order-numbers/locality/{country_iso}

URL Parameters

country_iso  string  
Two letter Country ISO code.

List Numbers.

requires authentication

List all available numbers.

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/order-numbers/numbers/AU/Melbourne (03)" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/order-numbers/numbers/AU/Melbourne (03)"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

[
    {
        "locality": "Melbourne",
        "country": "Australia",
        "country_iso": "AU",
        "country_prefix": 61,
        "locality_prefix": 3,
        "number": 61311112002,
        "pool": "local"
    },
    {
        "locality": "Melbourne",
        "country": "Australia",
        "country_iso": "AU",
        "country_prefix": 61,
        "locality_prefix": 3,
        "number": 61311112005,
        "pool": "local"
    }
]

Request      

GET api/v1/order-numbers/numbers/{country_iso}/{locality_id}

URL Parameters

country_iso  string  
Two letter Country ISO code.

locality_id  string  
The locality in which you want to list numbers.

Assign Number.

requires authentication

Assign a number to the service.

Example request:

curl -X POST \
    "https://dashboard.url.net.au/api/v1/order-numbers/assign" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"number_id":"sapiente","supply_uuid":"vel","number":6131231234}'
const url = new URL(
    "https://dashboard.url.net.au/api/v1/order-numbers/assign"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "number_id": "sapiente",
    "supply_uuid": "vel",
    "number": 6131231234
}

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):

{
    "error": "0",
    "message": "6131231234 has been assigned"
}

Example response (200, Assignment failed):

{
    "error": "1",
    "message": "Unable to assign the requested number"
}

Request      

POST api/v1/order-numbers/assign

Body Parameters

number_id  string  
The unique number_id from the List Number function.

supply_uuid  string  
The unique supply_uuid from the List Number function.

number  integer optional  
The number to be assigned.

Cancel Number.

requires authentication

Cancels the specified number. Once the number is removed there is no guarantee we can recover the number if you change your mind.

Example request:

curl -X DELETE \
    "https://dashboard.url.net.au/api/v1/order-numbers/cancel/6131231234" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/order-numbers/cancel/6131231234"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200):

{
    "error": "0",
    "message": "6131231234 has been canceled"
}

Request      

DELETE api/v1/order-numbers/cancel/{number}

URL Parameters

number  integer  
The requested number to cancel.

Originate

Call to External Number.

requires authentication

Example request:

curl -X POST \
    "https://dashboard.url.net.au/api/v1/pbx/originate/call-connect" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"phone_number":61412341234,"caller_id":61312341234,"dialplan_number":9999}'
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/originate/call-connect"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "phone_number": 61412341234,
    "caller_id": 61312341234,
    "dialplan_number": 9999
}

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):

{
    "status": "ok",
    "message": "Call Connected"
}

Request      

POST api/v1/pbx/originate/call-connect

Body Parameters

phone_number  integer  
The number you wish to dial.

caller_id  integer  
The caller id to present, must be a valid caller id number in the account.

dialplan_number  integer  
The internal dialplan number which can be obtained via the Dialplan section.

PBX Action Toggles

List Action Toggles.

requires authentication

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/pbx/action-toggles" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/action-toggles"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

[
    {
        "id": 219,
        "name": "Test",
        "status": true
    }
]

Request      

GET api/v1/pbx/action-toggles

Create a new action-toggle.

requires authentication

Create a new action-toggle for your service.

Example request:

curl -X POST \
    "https://dashboard.url.net.au/api/v1/pbx/action-toggles" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"name":"quam","status":true}'
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/action-toggles"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "quam",
    "status": true
}

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):

{
    "id": 219
}

Request      

POST api/v1/pbx/action-toggles

Body Parameters

name  string  
Friendly name for the action-toggle.

status  boolean optional  
1 = True, 0 = False, defaults to 0 if not specified.

Show Action Toggle.

requires authentication

Get single action-toggle by id.

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/pbx/action-toggles/219" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/action-toggles/219"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "id": 219,
    "name": "Test",
    "status": true
}

Request      

GET api/v1/pbx/action-toggles/{action_toggle}

URL Parameters

action_toggle  integer  
The unique action-toggle id.

Update a Action Toggle.

requires authentication

Update a single action-toggle by the ID.

Example request:

curl -X PUT \
    "https://dashboard.url.net.au/api/v1/pbx/action-toggles/219" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"name":"cum","status":true}'
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/action-toggles/219"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "cum",
    "status": true
}

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):

{
    "id": 219,
    "name": "Test",
    "status": true
}

Request      

PUT api/v1/pbx/action-toggles/{action_toggle}

PATCH api/v1/pbx/action-toggles/{action_toggle}

URL Parameters

action_toggle  integer  
The unique action-toggle id.

Body Parameters

name  string optional  
Friendly name for the action-toggle.

status  boolean optional  
1 = True, 0 = False.

Delete Action Toggle.

requires authentication

Deletes the selected action toggle.

Example request:

curl -X DELETE \
    "https://dashboard.url.net.au/api/v1/pbx/action-toggles/219" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/action-toggles/219"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200):

{
    "status": "success"
}

Request      

DELETE api/v1/pbx/action-toggles/{action_toggle}

URL Parameters

action_toggle  integer  
The unique action-toggle id.

PBX Call Recordings

List Call Recordings.

requires authentication

Lists the call recordings present in your service.

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/pbx/call-recordings?time_period=qui&start_time=1496956949&end_time=1496956949" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/call-recordings"
);

let params = {
    "time_period": "qui",
    "start_time": "1496956949",
    "end_time": "1496956949",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

[
    {
        "time": 1642122054,
        "uuid": "6001b223-5713-4c0a-90ea-11090fec9e11",
        "caller_id": "61812341234",
        "destination": "61312341234",
        "duration": 112,
        "wav_size": 3585422,
        "mp3_size": 1793805,
        "notes": null,
        "call_outcome": null,
        "stream_url": "https:\/\/dashboard.url.net.au\/streams\/recording\/6b076246-2945-4ed5-99f5-8cfef707a9b8\/1234"
    }
]

Request      

GET api/v1/pbx/call-recordings

Query Parameters

time_period  string optional  
You can use today, yesterday, this_month or last_month to poll the records instead of using start_time and end_time.

start_time  integer optional  
In EPOCH the start time of the query.

end_time  integer optional  
In EPOCH the end time of the query - please note the end time should not be greater than one month from the start time.

PBX Call Transcripts

Download VTT File.

requires authentication

Downloads the VTT transcript file for a call from S3. Returns the raw VTT file content (text/vtt) as a download.

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/pbx/call-transcripts/download-vtt/45" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/call-transcripts/download-vtt/45"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET api/v1/pbx/call-transcripts/download-vtt/{transcript_id}

URL Parameters

transcript_id  integer  
The unique ID of the transcript record.

List Call Transcripts.

requires authentication

Lists the call transcripts present in your service.

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/pbx/call-transcripts?time_period=this_month&timezone=Australia%2FSydney&start_time=1496956949&end_time=2" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/call-transcripts"
);

let params = {
    "time_period": "this_month",
    "timezone": "Australia/Sydney",
    "start_time": "1496956949",
    "end_time": "2",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

[
    {
        "transcript_id": 1,
        "call_recording_id": 5001,
        "service_id": 100,
        "keywords": "billing, refund",
        "summary": "Customer called about a billing discrepancy and was issued a refund.",
        "caller_id": "61812341234",
        "destination": "61312341234",
        "duration": 112,
        "names_involved": "Jane Smith",
        "sentiment": "positive",
        "call_outcome": "resolved",
        "vtt_url": "https:\/\/dashboard.url.net.au\/api\/v1\/pbx\/call-transcripts\/download-vtt\/1",
        "recording_url": "https:\/\/dashboard.url.net.au\/streams\/recording\/6b076246-2945-4ed5-99f5-8cfef707a9b8\/1234"
    }
]

Request      

GET api/v1/pbx/call-transcripts

Query Parameters

time_period  string optional  
You can use today, yesterday, this_month or last_month to poll the records instead of using start_time and end_time.

timezone  string optional  
The timezone used when evaluating time_period.

start_time  integer optional  
In EPOCH the start time of the query.

end_time  integer optional  
In EPOCH the end time of the query - please note the end time should not be greater than one month from the start time.

PBX Extensions

List Extensions.

requires authentication

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/pbx/extensions" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/extensions"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

[
    {
        "id": 219,
        "user_id": "1001",
        "name": "Jane Smith",
        "customer_location_id": 38,
        "emergency_dial_number": "000",
        "caller_id": null,
        "area_code": "613",
        "storage_hold_music_id": 1,
        "timezone": "Australia\/Melbourne",
        "voicemail": 0,
        "vm_password": "1212",
        "vm_no_pin": 0,
        "vm_delay": 15,
        "vm_set_read": 0,
        "outbound_recording": null,
        "whisper_announcement_id": null,
        "ndlb": null,
        "network": null,
        "netmask": null,
        "agent_mode": 0,
        "agent_status": null,
        "agent_wrap_time": null,
        "agent_call_timeout": null,
        "agent_busy_delay_time": null,
        "internal_alert_info": null,
        "group_name": "Default",
        "agent_uuid": null,
        "tolls": [],
        "voicemail_emails": []
    }
]

Request      

GET api/v1/pbx/extensions

Create a new extension.

requires authentication

Create a new extension for your service.

Example request:

curl -X POST \
    "https://dashboard.url.net.au/api/v1/pbx/extensions" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"name":"ab","area_code":15,"timezone":"Australia\/Melbourne","voicemail":true,"vm_password":4,"vm_delay":6,"customer_location_id":14,"emergency_dial_number":5,"caller_id":12,"password":"nostrum","user_id":1001,"storage_hold_music_id":4,"voicemail_emails":["dicta","blanditiis"],"vm_no_pin":true,"vm_set_read":false,"outbound_recording":true,"whisper_announcement_id":3,"ndlb":false,"network":"explicabo","netmask":"255.255.255.255","agent_mode":false,"agent_status":"molestiae","agent_wrap_time":11,"agent_call_timeout":16,"agent_busy_delay_time":19,"internal_alert_info":"ad","group_name":"ipsa","tolls":["vitae","error"]}'
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/extensions"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "ab",
    "area_code": 15,
    "timezone": "Australia\/Melbourne",
    "voicemail": true,
    "vm_password": 4,
    "vm_delay": 6,
    "customer_location_id": 14,
    "emergency_dial_number": 5,
    "caller_id": 12,
    "password": "nostrum",
    "user_id": 1001,
    "storage_hold_music_id": 4,
    "voicemail_emails": [
        "dicta",
        "blanditiis"
    ],
    "vm_no_pin": true,
    "vm_set_read": false,
    "outbound_recording": true,
    "whisper_announcement_id": 3,
    "ndlb": false,
    "network": "explicabo",
    "netmask": "255.255.255.255",
    "agent_mode": false,
    "agent_status": "molestiae",
    "agent_wrap_time": 11,
    "agent_call_timeout": 16,
    "agent_busy_delay_time": 19,
    "internal_alert_info": "ad",
    "group_name": "ipsa",
    "tolls": [
        "vitae",
        "error"
    ]
}

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):

{
    "extension_id": 219
}

Request      

POST api/v1/pbx/extensions

Body Parameters

name  string  
Friendly name for the extension.

area_code  integer  
The area code including country code for the extension. e.g. 613 for Australia/Melbourne, 612 for Australia/Sydney.

timezone  string  
The timezone the extension belongs to.

voicemail  boolean optional  
1 for voicemail to be enabled, 0 for disabled.

vm_password  integer optional  
A 4 digit code for a voicemail password.

vm_delay  integer optional  
How long to wait for a call to go to voicemail, please note only applies to internal calls.

customer_location_id  integer  
Unique location id for the location the extension belongs, this is currently controlled via the Locations section in the dashboard.

emergency_dial_number  integer  
The number that is dialed for emergency access, currently only accepts 000 for Australia.

caller_id  integer optional  
The caller id number to display when making an outbound call, must be a number listed under your account.

password  string  

user_id  integer  
The extension number.

storage_hold_music_id  integer optional  
The unique identifier for the hold music to play, use 1 for system default.

voicemail_emails  string[] optional  
List of email addresses voicemail messages should be sent to.

vm_no_pin  boolean optional  
1 if you want the user to be able to call *101 and not be required to enter a voicemail password. Set to 0 to enforce password always.

vm_set_read  boolean optional  
Set to 1 to mark messages as read and disable the voicemail waiting notification on the phone.

outbound_recording  boolean optional  
Set to 1 to enable outbound recording, local government regulation must be adhered to when enabling this.

whisper_announcement_id  integer optional  
If set will play an audio file announcement when an outbound call is answered.

ndlb  boolean optional  
In most cases set to 0, but if you are having issues with extensions not registering correctly, sometimes enabling this will help.

network  string optional  
Specify an external IP to lock the extension to only be able to authenticate for a particular IP.

netmask  string optional  
Used in conjunction with network and is a netmask for the network address.

agent_mode  boolean optional  
If 1 then the agent mode will be enabled and can be used in conjunction with Skillset settings.

agent_status  string optional  
Set the current mode of the agent, options are Available, Logged Out, On Break.

agent_wrap_time  integer optional  
How long to wait (seconds), cannot be less than 5, before giving the agent the next call, recommended 10 seconds.

agent_call_timeout  integer optional  
How long to ring the agent (seconds) before moving to the next, recommended 10 seconds.

agent_busy_delay_time  integer optional  
How long to wait (seconds), cannot be less than 5, before trying the agent again if busy or in DND, recommended 10 seconds.

internal_alert_info  string optional  
Custom alert to send when an internal call is made, for Yealink phones you can use ;info=Ring5 to have a different ring for internal calls.

group_name  string optional  
The name of the group this extension is linked to.

tolls  string[] optional  
Tolls the extension is allowed to dial. Valid options are: australia_directory, australia_local, australia_mobile, international.

Show Extension.

requires authentication

Get single extension by id.

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/pbx/extensions/219" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/extensions/219"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "id": 219,
    "user_id": "1999",
    "name": "Test",
    "customer_location_id": 38,
    "emergency_dial_number": "000",
    "caller_id": null,
    "area_code": "613",
    "storage_hold_music_id": null,
    "timezone": "Australia\/Melbourne",
    "voicemail": 0,
    "vm_password": "1212",
    "vm_no_pin": 0,
    "vm_delay": 15,
    "vm_set_read": 0,
    "outbound_recording": null,
    "whisper_announcement_id": null,
    "ndlb": null,
    "network": null,
    "netmask": null,
    "agent_mode": 0,
    "agent_status": null,
    "agent_wrap_time": null,
    "agent_call_timeout": null,
    "agent_busy_delay_time": null,
    "internal_alert_info": null,
    "group_name": "Default",
    "tolls": [],
    "voicemail_emails": []
}

Request      

GET api/v1/pbx/extensions/{extension}

URL Parameters

extension  integer  
The unique extension id.

Update an Extension.

requires authentication

Update a single extension by the ID.

Example request:

curl -X PUT \
    "https://dashboard.url.net.au/api/v1/pbx/extensions/219" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"user_id":1001,"name":"excepturi","customer_location_id":15,"emergency_dial_number":2,"caller_id":12,"area_code":16,"storage_hold_music_id":13,"timezone":"Australia\/Melbourne","voicemail":false,"voicemail_emails":["voluptatem","repellat"],"vm_password":12,"vm_no_pin":false,"vm_delay":5,"vm_set_read":true,"outbound_recording":false,"whisper_announcement_id":2,"ndlb":true,"network":"assumenda","netmask":"255.255.255.255","agent_mode":true,"agent_status":"eum","agent_wrap_time":5,"agent_call_timeout":15,"agent_busy_delay_time":13,"internal_alert_info":"commodi","group_name":"eius","tolls":["dolores","amet"]}'
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/extensions/219"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "user_id": 1001,
    "name": "excepturi",
    "customer_location_id": 15,
    "emergency_dial_number": 2,
    "caller_id": 12,
    "area_code": 16,
    "storage_hold_music_id": 13,
    "timezone": "Australia\/Melbourne",
    "voicemail": false,
    "voicemail_emails": [
        "voluptatem",
        "repellat"
    ],
    "vm_password": 12,
    "vm_no_pin": false,
    "vm_delay": 5,
    "vm_set_read": true,
    "outbound_recording": false,
    "whisper_announcement_id": 2,
    "ndlb": true,
    "network": "assumenda",
    "netmask": "255.255.255.255",
    "agent_mode": true,
    "agent_status": "eum",
    "agent_wrap_time": 5,
    "agent_call_timeout": 15,
    "agent_busy_delay_time": 13,
    "internal_alert_info": "commodi",
    "group_name": "eius",
    "tolls": [
        "dolores",
        "amet"
    ]
}

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):

{
    "extension_id": 219
}

Request      

PUT api/v1/pbx/extensions/{extension}

PATCH api/v1/pbx/extensions/{extension}

URL Parameters

extension  integer  
The unique extension id.

Body Parameters

user_id  integer optional  
The extension number.

name  string optional  
Friendly name for the extension.

customer_location_id  integer optional  
Unique location id for the location the extension belongs, this is currently controlled via the Locations section in the dashboard.

emergency_dial_number  integer optional  
The number that is dialed for emergency access, currently only accepts 000 for Australia.

caller_id  integer optional  
The caller id number to display when making an outbound call, must be a number listed under your account.

area_code  integer optional  
The area code including country code for the extension. e.g. 613 for Australia/Melbourne, 612 for Australia/Sydney.

storage_hold_music_id  integer optional  
The unique identifier for the hold music to play, use 1 for system default.

timezone  string optional  
The timezone the extension belongs to.

voicemail  boolean optional  
1 for voicemail to be enabled, 0 for disabled.

voicemail_emails  string[] optional  
List of email addresses voicemail messages should be sent to.

vm_password  integer optional  
A 4 digit code for a voicemail password.

vm_no_pin  boolean optional  
1 if you want the user to be able to call *101 and not be required to enter a voicemail password. Set to 0 to enforce password always.

vm_delay  integer optional  
How long to wait for a call to go to voicemail, please note only applies to internal calls.

vm_set_read  boolean optional  
Set to 1 to mark messages as read and disable the voicemail waiting notification on the phone.

outbound_recording  boolean optional  
Set to 1 to enable outbound recording, local government regulation must be adhered to when enabling this.

whisper_announcement_id  integer optional  
If set will play an audio file announcement when an outbound call is answered.

ndlb  boolean optional  
In most cases set to 0, but if you are having issues with extensions not registering correctly, sometimes enabling this will help.

network  string optional  
Specify an external IP to lock the extension to only be able to authenticate for a particular IP.

netmask  string optional  
Used in conjunction with network and is a netmask for the network address.

agent_mode  boolean optional  
If 1 then the agent mode will be enabled and can be used in conjunction with Skillset settings.

agent_status  string optional  
Set the current mode of the agent, options are Available, Logged Out, On Break.

agent_wrap_time  integer optional  
How long to wait (seconds), cannot be less than 5, before giving the agent the next call, recommended 10 seconds.

agent_call_timeout  integer optional  
How long to ring the agent (seconds) before moving to the next, recommended 10 seconds.

agent_busy_delay_time  integer optional  
How long to wait (seconds), cannot be less than 5, before trying the agent again if busy or in DND, recommended 10 seconds.

internal_alert_info  string optional  
Custom alert to send when an internal call is made, for Yealink phones you can use ;info=Ring5 to have a different ring for internal calls.

group_name  string optional  
The name of the group this extension is linked to.

tolls  string[] optional  
Tolls the extension is allowed to dial. Valid options are: australia_directory, australia_local, australia_mobile, international.

Delete Extension.

requires authentication

Deletes the selected extension.

Example request:

curl -X DELETE \
    "https://dashboard.url.net.au/api/v1/pbx/extensions/219" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/extensions/219"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200):

{
    "status": "success"
}

Request      

DELETE api/v1/pbx/extensions/{extension}

URL Parameters

extension  integer  
The unique extension id.

PBX Phonebook Items

List Phonebook Items.

requires authentication

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/pbx/phonebook/219/items" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/phonebook/219/items"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

[
    {
        "id": 219,
        "name": "Jane Smith",
        "office": "1234567890",
        "office2": null,
        "mobile": null,
        "home": null,
        "other": null
    }
]

Request      

GET api/v1/pbx/phonebook/{phonebook_id}/items

URL Parameters

phonebook_id  integer  
The id of the phonebook, see PBX Phonebook for more information.

Create a new phonebook item.

requires authentication

Create a new phonebook item for your phonebook.

Example request:

curl -X POST \
    "https://dashboard.url.net.au/api/v1/pbx/phonebook/219/items" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"name":"voluptatem","office":"saepe","office2":"quia","mobile":"asperiores","home":"eaque","other":"cumque"}'
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/phonebook/219/items"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "voluptatem",
    "office": "saepe",
    "office2": "quia",
    "mobile": "asperiores",
    "home": "eaque",
    "other": "cumque"
}

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):

{
    "id": 219
}

Request      

POST api/v1/pbx/phonebook/{phonebook_id}/items

URL Parameters

phonebook_id  integer  
The id of the phonebook, see PBX Phonebook for more information.

Body Parameters

name  string  
The person's name.

office  string optional  
The person's office number.

office2  string optional  
The person's second office number.

mobile  string optional  
The person's mobile number.

home  string optional  
The person's home number.

other  string optional  
The person's other number.

Show Phonebook Item.

requires authentication

Get single phonebook item entry by id.

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/pbx/phonebook/219/items/219" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/phonebook/219/items/219"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "id": 219,
    "name": "Test",
    "office": "1234567890",
    "office2": null,
    "mobile": null,
    "home": null,
    "other": null
}

Request      

GET api/v1/pbx/phonebook/{phonebook_id}/items/{item}

URL Parameters

phonebook_id  integer  
The id of the phonebook, see PBX Phonebook for more information.

item  integer  
The unique phonebook item id.

Update a Phonebook Item.

requires authentication

Update a single phonebook item by the ID.

Example request:

curl -X PUT \
    "https://dashboard.url.net.au/api/v1/pbx/phonebook/219/items/219" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"name":"quo","office":"et","office2":"pariatur","mobile":"iure","home":"consequatur","other":"repudiandae"}'
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/phonebook/219/items/219"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "quo",
    "office": "et",
    "office2": "pariatur",
    "mobile": "iure",
    "home": "consequatur",
    "other": "repudiandae"
}

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):

{
    "status": "success",
    "id": "219"
}

Request      

PUT api/v1/pbx/phonebook/{phonebook_id}/items/{item}

PATCH api/v1/pbx/phonebook/{phonebook_id}/items/{item}

URL Parameters

phonebook_id  integer  
The id of the phonebook, see PBX Phonebook for more information.

item  integer  
The unique phonebook item id.

Body Parameters

name  string optional  
The person's name.

office  string optional  
The person's office number.

office2  string optional  
The person's second office number.

mobile  string optional  
The person's mobile number.

home  string optional  
The person's home number.

other  string optional  
The person's other number.

Delete Phonebook Item.

requires authentication

Deletes the selected phonebook item.

Example request:

curl -X DELETE \
    "https://dashboard.url.net.au/api/v1/pbx/phonebook/219/items/219" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/phonebook/219/items/219"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200):

{
    "status": "success"
}

Request      

DELETE api/v1/pbx/phonebook/{phonebook_id}/items/{item}

URL Parameters

phonebook_id  integer  
The id of the phonebook, see PBX Phonebook for more information.

item  integer  
The unique phonebook item id.

PBX Phonebook

List Phonebooks.

requires authentication

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/pbx/phonebook" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/phonebook"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

[
    {
        "id": 219,
        "name": "Melbourne"
    }
]

Request      

GET api/v1/pbx/phonebook

Create a new phonebook.

requires authentication

Create a new phonebook for your service.

Example request:

curl -X POST \
    "https://dashboard.url.net.au/api/v1/pbx/phonebook" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"name":"eum"}'
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/phonebook"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "eum"
}

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):

{
    "id": 219
}

Request      

POST api/v1/pbx/phonebook

Body Parameters

name  string  
Friendly name for the phonebook.

Show Phonebook.

requires authentication

Get single phonebook by id.

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/pbx/phonebook/219" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/phonebook/219"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "id": 219,
    "name": "Test"
}

Request      

GET api/v1/pbx/phonebook/{phonebook}

URL Parameters

phonebook  integer  
The unique phonebook id.

Update a Phonebook.

requires authentication

Update a single phonebook by the ID.

Example request:

curl -X PUT \
    "https://dashboard.url.net.au/api/v1/pbx/phonebook/219" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"name":"a"}'
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/phonebook/219"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "a"
}

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):

"The Phonebook named was changed to Test"

Request      

PUT api/v1/pbx/phonebook/{phonebook}

PATCH api/v1/pbx/phonebook/{phonebook}

URL Parameters

phonebook  integer  
The unique phonebook id.

Body Parameters

name  string optional  
Friendly name for the phonebook.

Delete Phonebook.

requires authentication

Deletes the selected phonebook.

Example request:

curl -X DELETE \
    "https://dashboard.url.net.au/api/v1/pbx/phonebook/219" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/phonebook/219"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200):

{
    "status": "success"
}

Request      

DELETE api/v1/pbx/phonebook/{phonebook}

URL Parameters

phonebook  integer  
The unique phonebook id.

PBX Registrations

List Registrations.

requires authentication

Lists the current registrations.

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/pbx/registrations" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/registrations"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "1000": [
        {
            "user_id": "1000",
            "expiry": "158",
            "protocol": "UDP",
            "external_ipaddress": "192.168.88.12",
            "external_port": "5060",
            "internal_ipaddress": "192.168.88.12",
            "contact_short": "1000 <sip:1000@192.168.88.12",
            "contact": "1000 sip:1000@192.168.88.12:5060",
            "status": "Registered(UDP)(unknown) exp(2019-08-07 15:47:17) expsecs(158)",
            "user_agent": "Yealink SIP-T54W 96.84.0.30"
        }
    ]
}

Request      

GET api/v1/pbx/registrations

Delete Registration.

requires authentication

Deletes the selected registration and reboots the extension.

Example request:

curl -X DELETE \
    "https://dashboard.url.net.au/api/v1/pbx/registrations/219" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/registrations/219"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200):

{
    "result": true
}

Request      

DELETE api/v1/pbx/registrations/{registration}

URL Parameters

registration  integer  
The unique extension id whose registration should be dropped.

PBX Reports

Incoming Calls to External Numbers.

requires authentication

Outputs call data for calls made to an external numbers.

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/pbx/reports/incoming-calls-external-numbers?time_period=impedit&start_time=1483189200&end_time=1496275200" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/reports/incoming-calls-external-numbers"
);

let params = {
    "time_period": "impedit",
    "start_time": "1483189200",
    "end_time": "1496275200",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

[
    {
        "id": 1,
        "service_id": 100,
        "answer_epoch": 1483189200,
        "end_epoch": 1483189260,
        "answer_stamp": "Sat, 31 Dec 2016 20:00:00 +1100",
        "end_stamp": "Sat, 31 Dec 2016 20:01:00 +1100",
        "created_time": 1483189195,
        "from": "61312345678",
        "to": "61398765432",
        "talk_duration": 60,
        "duration": 65,
        "hangup_case": "NORMAL_CLEARING",
        "uuid": "c1f2e3d4-0000-0000-0000-000000000000",
        "external_caller_name": "Jane Smith",
        "dialplan_name": "XML",
        "condition_name": "normal_clearing"
    }
]

Request      

GET api/v1/pbx/reports/incoming-calls-external-numbers

Query Parameters

time_period  string optional  
You can use today, yesterday, this_month or last_month to poll the records instead of using start_time and end_time.

start_time  integer optional  
In EPOCH the start time of the query.

end_time  integer optional  
In EPOCH the end time of the query - please note the end time should not be greater than one month from the start time.

All Outgoing Calls.

requires authentication

Outputs all calls made to external destinations.

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/pbx/reports/outgoing-calls?time_period=ut&timezone=Australia%2FMelbourne&start_time=1483189200&end_time=1496275200" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/reports/outgoing-calls"
);

let params = {
    "time_period": "ut",
    "timezone": "Australia/Melbourne",
    "start_time": "1483189200",
    "end_time": "1496275200",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

[
    {
        "id": 1,
        "service_id": 100,
        "answer_epoch": 1483189200,
        "end_epoch": 1483189260,
        "answer_stamp": "Sat, 31 Dec 2016 20:00:00 +1100",
        "end_stamp": "Sat, 31 Dec 2016 20:01:00 +1100",
        "created_time": 1483189195,
        "from": "200",
        "to": "61398765432",
        "talk_duration": 60,
        "duration": 65,
        "hangup_case": "NORMAL_CLEARING",
        "uuid": "c1f2e3d4-0000-0000-0000-000000000000",
        "parent_uuid": null,
        "transferred_call": false,
        "rate_digits": 61,
        "rate_name": "Australia Mobile"
    }
]

Request      

GET api/v1/pbx/reports/outgoing-calls

Query Parameters

time_period  string optional  
You can use today, yesterday, this_month or last_month to poll the records instead of using start_time and end_time.

timezone  string optional  
The timezone you use when evaluating time_period (only used with time_period).

start_time  integer optional  
In EPOCH the start time of the query.

end_time  integer optional  
In EPOCH the end time of the query - please note the end time should not be greater than one month from the start time.

Answered Extensions.

requires authentication

Outputs all calls that were answered by an extension.

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/pbx/reports/answered-extensions?time_period=tempora&timezone=Australia%2FMelbourne&start_time=1483189200&end_time=1496275200" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/reports/answered-extensions"
);

let params = {
    "time_period": "tempora",
    "timezone": "Australia/Melbourne",
    "start_time": "1483189200",
    "end_time": "1496275200",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

[
    {
        "id": 1,
        "service_id": 100,
        "answer_epoch": 1483189200,
        "end_epoch": 1483189260,
        "answer_stamp": "Sat, 31 Dec 2016 20:00:00 +1100",
        "end_stamp": "Sat, 31 Dec 2016 20:01:00 +1100",
        "created_time": 1483189195,
        "from": "61312345678",
        "from_extension_name": null,
        "to": "200",
        "to_extension_name": "Jane Smith",
        "phonebook_name": null,
        "transfer_to": null,
        "transfer_from": null,
        "talk_duration": 60,
        "duration": 65,
        "hangup_case": "NORMAL_CLEARING",
        "uuid": "c1f2e3d4-0000-0000-0000-000000000000",
        "originator": null,
        "dialplan_name": "XML",
        "condition_name": "normal_clearing",
        "external_did": 61398765432,
        "skillset_name": null,
        "queue_name": null,
        "record_uuid": null
    }
]

Request      

GET api/v1/pbx/reports/answered-extensions

Query Parameters

time_period  string optional  
You can use today, yesterday, this_month or last_month to poll the records instead of using start_time and end_time.

timezone  string optional  
The timezone you use when evaluating time_period (only used with time_period).

start_time  integer optional  
In EPOCH the start time of the query.

end_time  integer optional  
In EPOCH the end time of the query - please note the end time should not be greater than one month from the start time.

Incoming Answered vs Missed.

requires authentication

Provide a report showing the incoming Answered vs Missed calls.

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/pbx/reports/incoming-answered-vs-missed?time_period=vel&start_time=1561903200&end_time=1561989599&timezone=Australia%2FMelbourne&exclude_did_numbers[]=possimus&ignore_seconds=7" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/reports/incoming-answered-vs-missed"
);

let params = {
    "time_period": "vel",
    "start_time": "1561903200",
    "end_time": "1561989599",
    "timezone": "Australia/Melbourne",
    "exclude_did_numbers[]": "possimus",
    "ignore_seconds": "7",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "exclude_did_numbers": [],
    "ignore_seconds": 2,
    "format_start_time": "2019-07-01 00:00:00",
    "format_end_time": "2019-07-01 23:59:59",
    "headings": [
        "00:00",
        "01:00"
    ],
    "legends": [
        "Answered",
        "Missed"
    ],
    "missed": [
        0,
        1
    ],
    "missed_vm": [
        0,
        0
    ],
    "day_total_answered": [
        42
    ],
    "day_total_missed": [
        3
    ],
    "day_total_missed_vm": [
        1
    ],
    "day_answered_seconds": [
        8172
    ],
    "hour_total_answered": [
        2,
        5
    ],
    "hour_total_missed": [
        0,
        1
    ],
    "hour_total_missed_vm": [
        0,
        0
    ],
    "total_answered": 42,
    "total_missed": 3,
    "total_missed_vm": 1,
    "top_10_hours": [
        "09:00",
        "10:00"
    ]
}

Request      

GET api/v1/pbx/reports/incoming-answered-vs-missed

Query Parameters

time_period  string optional  
You can use today, yesterday, this_month or last_month to poll the records instead of using start_time and end_time.

start_time  integer optional  
In EPOCH the start time of the query.

end_time  integer optional  
In EPOCH the end time of the query - please note the end time should not be greater than one month from the start time.

timezone  string optional  
Timezone of the report data.

exclude_did_numbers  string[] optional  
List of DID numbers to exclude from the report (optional).

ignore_seconds  integer optional  
Exclude any calls that lasted less than X seconds (optional).

Missed Calls.

requires authentication

Provide a report showing Missed calls.

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/pbx/reports/missed-calls?time_period=et&timezone=Australia%2FMelbourne&start_time=1561903200&end_time=1561989599" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/reports/missed-calls"
);

let params = {
    "time_period": "et",
    "timezone": "Australia/Melbourne",
    "start_time": "1561903200",
    "end_time": "1561989599",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "12345": {
        "uuid": "c1f2e3d4-0000-0000-0000-000000000000",
        "service_id": 100,
        "answer_epoch": 0,
        "end_epoch": 1561903260,
        "from": "61312345678",
        "external_did": "61398765432",
        "duration": 25,
        "wait_sec": 25,
        "hangup_case": "NO_ANSWER",
        "dialplan_name": "XML",
        "condition_name": "normal_clearing",
        "extensions": {
            "200": {
                "extension": "200",
                "hangup_cause": "NO_ANSWER"
            }
        }
    }
}

Request      

GET api/v1/pbx/reports/missed-calls

Query Parameters

time_period  string optional  
You can use today, yesterday, this_month or last_month to poll the records instead of using start_time and end_time.

timezone  string optional  
The timezone you use when evaluating time_period (only used with time_period).

start_time  integer optional  
In EPOCH the start time of the query.

end_time  integer optional  
In EPOCH the end time of the query - please note the end time should not be greater than one month from the start time.

Agent Availability.

requires authentication

Outputs the agent status history (Call Centre Agent Availability) for the service.

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/pbx/reports/agent-availability?time_period=quidem&timezone=Australia%2FMelbourne&start_time=1483189200&end_time=1496275200&agent_ids[]=10&agent_statuses[]=ad" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/reports/agent-availability"
);

let params = {
    "time_period": "quidem",
    "timezone": "Australia/Melbourne",
    "start_time": "1483189200",
    "end_time": "1496275200",
    "agent_ids[]": "10",
    "agent_statuses[]": "ad",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

[
    {
        "user_id": 101,
        "name": "Jane Smith",
        "status": "Available",
        "epoch": 1483189200,
        "date_time": "Mon, 31 Dec 2016 20:00:00 +1100",
        "timezone": "Australia\/Melbourne",
        "duration": 312
    }
]

Request      

GET api/v1/pbx/reports/agent-availability

Query Parameters

time_period  string optional  
You can use today, yesterday, this_month or last_month to poll the records instead of using start_time and end_time.

timezone  string optional  
The timezone you use when evaluating time_period, and to format date_time in the response (defaults to Australia/Melbourne).

start_time  integer optional  
In EPOCH the start time of the query.

end_time  integer optional  
In EPOCH the end time of the query - please note the end time should not be greater than one month from the start time.

agent_ids  integer[] optional  
Optional list of agent extension user IDs to filter by, defaults to all agents on the service.

agent_statuses  string[] optional  
Optional list of agent statuses to filter by, defaults to all statuses configured on the service.

PBX Skillsets

List Skillsets.

requires authentication

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/pbx/skillsets/agent-status" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/skillsets/agent-status"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

[
    {
        "id": 219,
        "name": "Sales",
        "agents": {
            "agent-uuid-1": {
                "agent_uuid": "agent-uuid-1",
                "user_id": "1001",
                "name": "Jane Smith",
                "agent_status": "Available",
                "agent_wrap_time": 10,
                "agent_busy_delay_time": 10,
                "agent_call_timeout": 10
            }
        },
        "status_counts": {
            "Available": 1,
            "Logged Out": 0,
            "On Break": 0
        }
    }
]

Request      

GET api/v1/pbx/skillsets/agent-status

Get Skillset.

requires authentication

Get single skillset by id or name.

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/pbx/skillsets/agent-status/Sales" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/skillsets/agent-status/Sales"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "id": 219,
    "name": "Sales",
    "agents": {
        "agent-uuid-1": {
            "agent_uuid": "agent-uuid-1",
            "user_id": "1001",
            "name": "Jane Smith",
            "agent_status": "Available",
            "agent_wrap_time": 10,
            "agent_busy_delay_time": 10,
            "agent_call_timeout": 10
        }
    },
    "status_counts": {
        "Available": 1,
        "Logged Out": 0,
        "On Break": 0
    }
}

Request      

GET api/v1/pbx/skillsets/agent-status/{agent_status}

URL Parameters

agent_status  string  
The skillset id or name.

PBX SMS

Send SMS Message.

requires authentication

Send a SMS message via your service (must have an SMS Enabled number to do this).

Example request:

curl -X POST \
    "https://dashboard.url.net.au/api/v1/pbx/sms/send" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"from":"61412341234","to":"+61412341234","body":"saepe"}'
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/sms/send"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "from": "61412341234",
    "to": "+61412341234",
    "body": "saepe"
}

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):

{
    "message_id": "7c853558-34e0-59bf-80e1-1c3baf8004a7",
    "time": 1576372423,
    "service_id": 123,
    "status": "successful"
}

Example response (400, From number not SMS capable):

"The from number you are using is not SMS capable or not found in your service"

Request      

POST api/v1/pbx/sms/send

Body Parameters

from  string  
The number you send messages from, must be in E.164 format.

to  string  
The number you wish to send a message to (it is recommended to send using E164 format with the leading +).

body  string  
The body of the message you wish to send.

PBX Voicemail Extensions

List Voicemail Extensions.

requires authentication

List all voicemail only extensions.

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/pbx/voicemail-extensions" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/voicemail-extensions"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

[
    {
        "id": 219,
        "user_id": "1999",
        "name": "Test",
        "vm_password": "1212",
        "voicemail_emails": []
    }
]

Request      

GET api/v1/pbx/voicemail-extensions

Create Voicemail Extensions.

requires authentication

Create a new voicemail extension.

Example request:

curl -X POST \
    "https://dashboard.url.net.au/api/v1/pbx/voicemail-extensions" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"name":"maxime","vm_password":20,"timezone":"Australia\/Melbourne","user_id":1001,"voicemail_emails":["error","magni"]}'
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/voicemail-extensions"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "maxime",
    "vm_password": 20,
    "timezone": "Australia\/Melbourne",
    "user_id": 1001,
    "voicemail_emails": [
        "error",
        "magni"
    ]
}

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):

{
    "voicemail_extension_id": 219
}

Request      

POST api/v1/pbx/voicemail-extensions

Body Parameters

name  string optional  
Friendly name for the extension.

vm_password  integer optional  
A 4 digit code for a voicemail password.

timezone  string optional  
The timezone the extension belongs to.

user_id  integer optional  
The extension number.

voicemail_emails  string[] optional  
List of email addresses voicemail messages should be sent to.

Show Voicemail Extension.

requires authentication

Get single voicemail extension by id.

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/pbx/voicemail-extensions/220" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/voicemail-extensions/220"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "id": 220,
    "user_id": "1999",
    "name": "Test",
    "timezone": "Australia\/Melbourne",
    "vm_password": "1212",
    "voicemail_emails": []
}

Example response (404, Not found):

"Cannot find Voicemail Extension, please check the ID"

Request      

GET api/v1/pbx/voicemail-extensions/{voicemail_extension}

URL Parameters

voicemail_extension  integer  
Unique voicemail extension ID.

Update Voicemail Extensions.

requires authentication

Update a single voicemail extension by the ID.

Example request:

curl -X PUT \
    "https://dashboard.url.net.au/api/v1/pbx/voicemail-extensions/220" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json" \
    -d '{"user_id":1001,"name":"ipsam","timezone":"Australia\/Melbourne","voicemail_emails":["mollitia","inventore"],"vm_password":17}'
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/voicemail-extensions/220"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "user_id": 1001,
    "name": "ipsam",
    "timezone": "Australia\/Melbourne",
    "voicemail_emails": [
        "mollitia",
        "inventore"
    ],
    "vm_password": 17
}

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):

{
    "voicemail_extension_id": 220
}

Request      

PUT api/v1/pbx/voicemail-extensions/{voicemail_extension}

PATCH api/v1/pbx/voicemail-extensions/{voicemail_extension}

URL Parameters

voicemail_extension  integer  
Unique voicemail extension ID.

Body Parameters

user_id  integer optional  
The extension number.

name  string optional  
Friendly name for the extension.

timezone  string optional  
The timezone the extension belongs to.

voicemail_emails  string[] optional  
List of email addresses voicemail messages should be sent to.

vm_password  integer optional  
A 4 digit code for a voicemail password.

Delete Voicemail Extension.

requires authentication

Deletes the selected voicemail extension.

Example request:

curl -X DELETE \
    "https://dashboard.url.net.au/api/v1/pbx/voicemail-extensions/219" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/voicemail-extensions/219"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200):

{
    "status": "success"
}

Request      

DELETE api/v1/pbx/voicemail-extensions/{voicemail_extension}

URL Parameters

voicemail_extension  integer  
Unique identifier for the extension.

PBX Voicemails

List Voicemails.

requires authentication

Lists the voicemails present in your service.

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/pbx/voicemail" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/voicemail"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

[
    {
        "uuid": "77ad4a68-12dc-43b3-921c-cfc12cf6068c",
        "created_epoch": "1619656367",
        "username": "1000",
        "cid_name": "Example Name",
        "cid_number": "61390085900",
        "message_len": "3",
        "stream_url": "https:\/\/dashboard.url.net.au\/streams\/voicemail\/34ad3075-352b-51f5-9029-608eeee6d3e4\/msg_73b25ef3-2f55-4874-ad15-a9ec52c74c09"
    }
]

Request      

GET api/v1/pbx/voicemail

Show Voicemail.

requires authentication

Show details of an individual voicemail.

Example request:

curl -X GET \
    -G "https://dashboard.url.net.au/api/v1/pbx/voicemail/77ad4a68-12dc-43b3-921c-cfc12cf6068c" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/voicemail/77ad4a68-12dc-43b3-921c-cfc12cf6068c"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):

{
    "uuid": "77ad4a68-12dc-43b3-921c-cfc12cf6068c",
    "created_epoch": "1619656367",
    "username": "1000",
    "cid_name": "Example Name",
    "cid_number": "61390085900",
    "message_len": "3",
    "stream_url": "https:\/\/dashboard.url.net.au\/streams\/voicemail\/34ad3075-352b-51f5-9029-608eeee6d3e4\/msg_bee923cf-ea23-42a8-96be-0632c3ec644c"
}

Request      

GET api/v1/pbx/voicemail/{voicemail}

URL Parameters

voicemail  string  
The unique voicemail uuid.

Delete Voicemail.

requires authentication

Delete a voicemail from your service.

Example request:

curl -X DELETE \
    "https://dashboard.url.net.au/api/v1/pbx/voicemail/77ad4a68-12dc-43b3-921c-cfc12cf6068c" \
    -H "Authorization: Bearer {YOUR_AUTH_KEY}" \
    -H "Content-Type: application/json" \
    -H "Accept: application/json"
const url = new URL(
    "https://dashboard.url.net.au/api/v1/pbx/voicemail/77ad4a68-12dc-43b3-921c-cfc12cf6068c"
);

let headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};


fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200):

{
    "status": "ok"
}

Request      

DELETE api/v1/pbx/voicemail/{voicemail}

URL Parameters

voicemail  string  
The unique voicemail uuid.