Devices

About Devices

Devices are the endpoints assigned to an account that serve that account's needs. Devices like fax machines, SIP phones, soft phone clients, and cell phones (via call fowarding), among others, can be represented by Kazoo devices.

Schema

A device be it a SIP phone or landline number

Key Description Type Default Required
call_forward The device call forward parameters object false
call_forward.direct_calls_only Determines if the calls that are not directly sent to the device should be forwarded boolean false false
call_forward.enabled Determines if the call forwarding should be used boolean false false
call_forward.failover Enable the call-forwarding parameters if the device is offline boolean false false
call_forward.ignore_early_media The option to determine if early media from the call forwarded number should ignored boolean true false
call_forward.keep_caller_id Determines if the caller id is kept when the call is forwarded, if not the devices caller id is used boolean true false
call_forward.number The number to forward calls to string(0..15) false
call_forward.require_keypress Determines if the callee is prompted to press 1 to accept the call boolean true false
call_forward.substitute Determines if the call forwarding replaces the device boolean true false
call_restriction Device level call restrictions for each available number classification object {} false
call_waiting #/definitions/call_waiting false
caller_id The device caller ID parameters object {} false
contact_list Contect List Parameters object {} false
contact_list.exclude If set to true the device is excluded from the contact list boolean false
device_type Arbitrary device type used by the UI and billing system string false
dial_plan A list of rules used to modify dialed numbers object {} false
do_not_disturb DND Parameters object false
do_not_disturb.enabled Is do-not-disturb enabled for this device? boolean false
enabled Determines if the device is currently enabled boolean true false
exclude_from_queues Do not ring this device when calling user/agent in queue boolean false false
language The language for the device string false
media The device media parameters object {} false
media.audio The audio media parameters object {} false
media.audio.codecs A list of audio codecs the device supports array(string('OPUS', 'CELT@32000h', 'G7221@32000h', 'G7221@16000h', 'G722', 'speex@32000h', 'speex@16000h', 'PCMU', 'PCMA', 'G729', 'GSM', 'CELT@48000h', 'CELT@64000h', 'G722_16', 'G722_32', 'CELT_48', 'CELT_64', 'Speex', 'speex')) ["PCMU"] false
media.audio.codecs.[] string false
media.bypass_media Default bypass media mode boolean, string('true', 'false', 'auto') false
media.encryption Encryption Parameters object {} false
media.encryption.enforce_security Is Encryption Enabled? boolean false false
media.encryption.methods Supported Encryption Types array(string('zrtp', 'srtp')) [] false
media.encryption.methods.[] string false
media.fax_option Is T.38 Supported? boolean false
media.ignore_early_media The option to determine if early media from the device should always be ignored boolean false
media.progress_timeout The progress timeout to apply to the device (seconds) integer false
media.video The video media parameters object {} false
media.video.codecs A list of video codecs the device supports array(string('VP8', 'H264', 'H263', 'H261')) [] false
media.video.codecs.[] string false
metaflows The device metaflow parameters #/definitions/metaflows false
music_on_hold The music on hold parameters used if not a property of the device owner object {} false
music_on_hold.media_id The ID of a media object that should be used as the music on hold string(0..128) false
mwi_unsolicitated_updates When true enables unsolicitated mwi notifications boolean true false
name A friendly name for the device string(1..128) true
outbound_flags List of flags (features) this device requires when making outbound calls array(string) false
outbound_flags.[] string false
owner_id The ID of the user object that 'owns' the device string(32) false
presence_id Static presence ID (used instead of SIP username) string false
provision Provision data object false
provision.feature_keys Feature Keys object false
provision.feature_keys./^[0-9]+$/ object false
provision.feature_keys./^[0-9]+$/.type Feature key type string('presence', 'parking', 'personal_parking', 'speed_dial') true
provision.feature_keys./^[0-9]+$/.value Feature key value string, integer true
register_overwrite_notify When true enables overwrite notifications boolean false false
ringtones Ringtone Parameters object {} false
ringtones.external The alert info SIP header added when the call is from internal sources string(0..256) false
ringtones.internal The alert info SIP header added when the call is from external sources string(0..256) false
sip SIP Parameters object {} false
sip.custom_sip_headers A property list of SIP headers beging with the prefix 'X-' object false
sip.expire_seconds The time, in seconds, sent to the provisioner for the registration period that the device should be configured with. integer 300 false
sip.ignore_completed_elsewhere When set to false the phone should not consider ring group calls answered elsewhere as missed boolean false
sip.invite_format The SIP request URI invite format string('username', 'npan', '1npan', 'e164', 'route') username false
sip.ip IP address for this device string false
sip.method Method of authentication string('password', 'ip') password false
sip.number The number used if the invite format is 1npan, npan, or e164 (if not set the dialed number is used) string false
sip.password SIP authentication password string(5..32) false
sip.realm The realm this device should use, overriding the account realm. Should rarely be necessary. string false
sip.route The SIP URL used if the invite format is 'route' string false
sip.static_route Sends all inbound calls to this string (instead of dialed number or username) string false
sip.username SIP authentication username string(2..32) false
suppress_unregister_notifications When true disables deregister notifications boolean false false
timezone Device's timezone string false
call_waiting

Parameters for server-side call waiting

Key Description Type Default Required
enabled Determines if server side call waiting is enabled/disabled boolean false
caller_id

Defines caller ID settings based on the type of call being made

Key Description Type Default Required
emergency The caller ID used when a resource is flagged as 'emergency' object false
emergency.name The caller id name for the object type string(0..35) false
emergency.number The caller id name for the object type string(0..35) false
external The default caller ID used when dialing external numbers object false
external.name The caller id name for the object type string(0..35) false
external.number The caller id name for the object type string(0..35) false
internal The default caller ID used when dialing internal extensions object false
internal.name The caller id name for the object type string(0..35) false
internal.number The caller id name for the object type string(0..35) false
dialplans
Key Description Type Default Required
system List of system dial plans array() false
metaflow

A metaflow node defines a module to execute, data to provide to that module, and one or more children to branch to

Key Description Type Default Required
metaflow.audio_level

audio_level metaflow schema

Key Description Type Default Required
children #/definitions/metaflow_children false
data object true
data.action string true
data.level string false
data.mode string false
module string('audio_level') true
metaflow.break

break metaflow schema

Key Description Type Default Required
children #/definitions/metaflow_children false
data object false
module string('break') true
metaflow.callflow

callflow metaflow schema

Key Description Type Default Required
children #/definitions/metaflow_children false
data object true
data.id string true
module string('callflow') true
metaflow.hangup

hangup metaflow schema

Key Description Type Default Required
children #/definitions/metaflow_children false
data object false
module string('hangup') true
metaflow.hold

hold metaflow schema

Key Description Type Default Required
children #/definitions/metaflow_children false
data object true
data.moh_aleg string false
data.moh_bleg string false
data.unhold_key string 1 false
module string('hold') true
metaflow.hold_control

hold_control metaflow schema

Key Description Type Default Required
children #/definitions/metaflow_children false
data object false
data.action string('hold', 'unhold', 'toggle') toggle false
module string('hold_control') true
metaflow.intercept

intercept metaflow schema

Key Description Type Default Required
children #/definitions/metaflow_children false
data object true
data.auto_answer boolean false false
data.target_id string true
data.target_type string('device', 'user', 'number') true
data.unbridged_only boolean true false
module string('intercept') true
metaflow.move

move metaflow schema

Key Description Type Default Required
children #/definitions/metaflow_children false
data object true
data.auto_answer boolean false false
data.device_id string false
data.owner_id string false
module string('move') true
metaflow.play

play metaflow schema

Key Description Type Default Required
children #/definitions/metaflow_children false
data object true
data.id string true
data.leg string('both', 'self', 'peer') both false
module string('play') true
metaflow.record_call

record_call metaflow schema

Key Description Type Default Required
children #/definitions/metaflow_children false
data object true
data.action string('start', 'stop', 'toggle') toggle true
data.format string false
data.media_name string false
module string('record_call') true
metaflow.resume

resume metaflow schema

Key Description Type Default Required
children #/definitions/metaflow_children false
data object false
module string('resume') true
metaflow.say

say metaflow schema

Key Description Type Default Required
children #/definitions/metaflow_children false
data object true
data.language string false
data.method string false
data.text string true
data.type string false
module string('say') true
metaflow.sound_touch

sound_touch metaflow schema

Key Description Type Default Required
children #/definitions/metaflow_children false
data object true
data.action string('start', 'stop') true
data.adjust_in_octaves integer false
data.adjust_in_semitones integer false
data.hook_dtmf boolean false false
data.pitch integer false
data.rate integer false
data.sending_leg boolean false false
data.tempo integer false
module string('sound_touch') true
metaflow.transfer

transfer metaflow schema

Key Description Type Default Required
children #/definitions/metaflow_children false
data object true
data.Transfer-Type string attended false
data.captures string false
data.target string false
module string('transfer') true
metaflow.tts

tts metaflow schema

Key Description Type Default Required
children #/definitions/metaflow_children false
data object true
data.engine string flite false
data.language string false
data.leg string self false
data.terminators string false
data.text string true
data.voice string female false
module string('tts') true
metaflow_children

A metaflow child nodes

Key Description Type Default Required
metaflows

Actions applied to a call outside of the normal callflow, initiated by the caller(s)

Key Description Type Default Required
binding_digit What DTMF will trigger the collection and analysis of the subsequent DTMF sequence string('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '*', '#') * false
digit_timeout How long to wait between DTMF presses before processing the collected sequence (milliseconds) integer false
listen_on Which leg(s) of the call to listen for DTMF string('both', 'self', 'peer') false
numbers A list of static numbers with their flows object false
numbers./^[0-9]+$/ #/definitions/metaflow false
patterns A list of patterns with their flows object false
patterns./.+/ #/definitions/metaflow false

Fetch summary of devices in account

GET /v2/accounts/{ACCOUNT_ID}/devices

curl -v -X GET \
    -X "X-Auth-Token: {AUTH_TOKEN} \
    http://{SERVER}:8000/v2/accounts/{ACCOUNT_ID}/devices
{
    "auth_token": "{AUTH_TOKEN}",
    "data": [
        {
            "device_type": "sip_device",
            "enabled": false,
            "id": "{DEVICE_ID}",
            "mac_address": "00:04:f2:ab:7e:fd",
            "name": "MyPolycom"
        }
    ],
    "page_size": 1,
    "request_id": "{REQUEST_ID}",
    "revision": "{REVISION}",
    "status": "success"
}

Create a new device

See the schema for available fields to include in the data portion

PUT /v2/accounts/{ACCOUNT_ID}/devices

curl -v -X PUT \
    -H "X-Auth-Token: {AUTH_TOKEN} \
    -H "Content-Type: application/json" \
    -d '{"data":{"name":"New Device"}}' \
    http://{SERVER}:8000/v2/accounts/{ACCOUNT_ID}/devices
{
    "auth_token": "{AUTH_TOKEN}",
    "data": {
        "call_restriction": {},
        "caller_id": {},
        "contact_list": {},
        "dial_plan": {},
        "enabled": true,
        "exclude_from_queues": false,
        "id": "{DEVICE_ID}",
        "media": {
            "audio": {
                "codecs": [
                    "PCMU"
                ]
            },
            "encryption": {
                "enforce_security": false,
                "methods": []
            },
            "video": {
                "codecs": []
            }
        },
        "music_on_hold": {},
        "mwi_unsolicitated_updates": true,
        "name": "New Device",
        "register_overwrite_notify": false,
        "ringtones": {},
        "sip": {
            "invite_format": "username",
            "method": "password",
            "registration_expiration": 300
        },
        "suppress_unregister_notifications": false
    },
    "request_id": "{REQUEST_ID}",
    "revision": "{REVISION}",
    "status": "success"
}

Remove a device

DELETE /v2/accounts/{ACCOUNT_ID}/devices/{DEVICE_ID}

curl -v -X DELETE \
    -H "X-Auth-Token: {AUTH_TOKEN}" \
    http://{SERVER}:8000/v2/accounts/{ACCOUNT_ID}/devices/{DEVICE_ID}
{
    "auth_token": "{AUTH_TOKEN}",
    "data": {
        "call_restriction": {},
        "caller_id": {},
        "contact_list": {},
        "dial_plan": {},
        "enabled": true,
        "exclude_from_queues": false,
        "id": "{DEVICE_ID}",
        "media": {
            "audio": {
                "codecs": [
                    "PCMU"
                ]
            },
            "encryption": {
                "enforce_security": false,
                "methods": []
            },
            "video": {
                "codecs": []
            }
        },
        "music_on_hold": {},
        "mwi_unsolicitated_updates": true,
        "name": "New Device",
        "register_overwrite_notify": false,
        "ringtones": {},
        "sip": {
            "invite_format": "username",
            "method": "password",
            "registration_expiration": 300
        },
        "suppress_unregister_notifications": false
    },
    "request_id": "{REQUEST_ID}",
    "revision": "{REVISION}",
    "status": "success"
}

Fetch a device

GET /v2/accounts/{ACCOUNT_ID}/devices/{DEVICE_ID}

curl -v -X GET \
    -H "X-Auth-Token: {AUTH_TOKEN}" \
    http://{SERVER}:8000/v2/accounts/{ACCOUNT_ID}/devices/{DEVICE_ID}
{
    "auth_token": "{AUTH_TOKEN}",
    "data": {
        "call_restriction": {},
        "caller_id": {},
        "contact_list": {},
        "dial_plan": {},
        "enabled": true,
        "exclude_from_queues": false,
        "id": "{DEVICE_ID}",
        "media": {
            "audio": {
                "codecs": [
                    "PCMU"
                ]
            },
            "encryption": {
                "enforce_security": false,
                "methods": []
            },
            "video": {
                "codecs": []
            }
        },
        "music_on_hold": {},
        "mwi_unsolicitated_updates": true,
        "name": "New Device",
        "register_overwrite_notify": false,
        "ringtones": {},
        "sip": {
            "invite_format": "username",
            "method": "password",
            "registration_expiration": 300
        },
        "suppress_unregister_notifications": false
    },
    "request_id": "{REQUEST_ID}",
    "revision": "{REVISION}",
    "status": "success"
}

Change a device doc

Including "sync":true in the "data" will attempt to reboot the phone. See the sync section below.

POST /v2/accounts/{ACCOUNT_ID}/devices/{DEVICE_ID}

curl -v -X POST \
    -H "X-Auth-Token: {AUTH_TOKEN}" \
    -H "Content-Type: application/json" \
    -d '{"data":{
        "name": "new device",
        "call_restriction": {},
        "caller_id": {},
        "contact_list": {},
        "dial_plan": {},
        "enabled": true,
        "exclude_from_queues": false,
        "media": {
            "audio": {"codecs": ["PCMU"]},
            "encryption": {"enforce_security": false, "methods": []},
            "video": {"codecs": []}
        },
        "music_on_hold": {},
        "mwi_unsolicitated_updates": true,
        "register_overwrite_notify": false,
        "ringtones": {},
        "sip": {
            "invite_format": "username",
            "method": "password",
            "registration_expiration": 300
        },
        "suppress_unregister_notifications": false,
        "id": "4f3330e78e664bb57f8fb23fbaac2429"
        }}' \
    http://{SERVER}:8000/v2/accounts/{ACCOUNT_ID}/devices/{DEVICE_ID}
{
    "auth_token": "{AUTH_TOKEN}",
    "data": {
        "call_restriction": {},
        "caller_id": {},
        "contact_list": {},
        "dial_plan": {},
        "enabled": true,
        "exclude_from_queues": false,
        "id": "{DEVICE_ID}",
        "media": {
            "audio": {
                "codecs": [
                    "PCMU"
                ]
            },
            "encryption": {
                "enforce_security": false,
                "methods": []
            },
            "video": {
                "codecs": []
            }
        },
        "music_on_hold": {},
        "mwi_unsolicitated_updates": true,
        "name": "new device",
        "register_overwrite_notify": false,
        "ringtones": {},
        "sip": {
            "invite_format": "username",
            "method": "password",
            "registration_expiration": 300
        },
        "suppress_unregister_notifications": false
    },
    "request_id": "{REQUEST_ID}",
    "revision": "{REVISION}",
    "status": "success"
}

Patch a device

PATCH /v2/accounts/{ACCOUNT_ID}/devices/{DEVICE_ID}

curl -v -X PATCH \
    -H "X-Auth-Token: {AUTH_TOKEN}" \
    -d '{"data":{"presence_id":"dis_my_device"}}' \
    http://{SERVER}:8000/v2/accounts/{ACCOUNT_ID}/devices/{DEVICE_ID}
{
    "auth_token": "{AUTH_TOKEN}",
    "data": {
        "call_restriction": {},
        "caller_id": {},
        "contact_list": {},
        "dial_plan": {},
        "enabled": true,
        "exclude_from_queues": false,
        "id": "{DEVICE_ID}",
        "media": {
            "audio": {
                "codecs": [
                    "PCMU"
                ]
            },
            "encryption": {
                "enforce_security": false,
                "methods": []
            },
            "video": {
                "codecs": []
            }
        },
        "music_on_hold": {},
        "mwi_unsolicitated_updates": true,
        "name": "new device",
        "presence_id":"dis_my_device",
        "register_overwrite_notify": false,
        "ringtones": {},
        "sip": {
            "invite_format": "username",
            "method": "password",
            "registration_expiration": 300
        },
        "suppress_unregister_notifications": false
    },
    "request_id": "{REQUEST_ID}",
    "revision": "{REVISION}",
    "status": "success"
}

Fetch registration statuses of all devices

This will fetch the current registrations of any devices. If no devices are registered, an empty list will be returned.

GET /v2/accounts/{ACCOUNT_ID}/devices/status

curl -v -X GET \
    -H "X-Auth-Token: {AUTH_TOKEN}" \
    http://{SERVER}:8000/v2/accounts/{ACCOUNT_ID}/devices/status
{
    "auth_token": "{AUTH_TOKEN}",
    "data": [
        {
            "device_id": "{DEVICE_ID}",
            "registered": true
        }
    ],
    "request_id": "{REQUEST_ID}",
    "revision": "{REVISION}",
    "status": "success"
}

Reboot a device

Some devices support receiving SIP NOTIFY packets with event = check-sync. This is typically used to reboot the phone if the configuration has changed. Kazoo will generate the NOTIFY packet if the device is registered.

POST /v2/accounts/{ACCOUNT_ID}/devices/{DEVICE_ID}/sync

curl -v -X POST \
    -H "X-Auth-Token: {AUTH_TOKEN}" \
    http://{SERVER}:8000/v2/accounts/{ACCOUNT_ID}/devices/{DEVICE_ID}/sync
{
    "auth_token": "{AUTH_TOKEN}",
    "data": "sync request sent",
    "request_id": "{REQUEST_ID}",
    "revision": "{REVISION}",
    "status": "success"
}

Execute a quick call

Ring the device; once answered, connect to {PHONE_NUMBER}

In this scenario, the device is considered the callee while the {PHONE_NUMBER} side is considered the caller (helpful to know when debugging a call!).

Query string options:

Key Type Description
auto_answer boolean() Tells the SIP phone to auto-answer the call, if supported
cid-name string() Set the caller ID name (defaults to "Device QuickCall")
cid-number string() Set the caller ID number (defaults to the {PHONE_NUMBER})
ignore-early-media boolean() Toggle whether to ignore early media
media string('bypass', 'process') Toggle whether to go peer-to-peer(bypass with the RTP
number_filter boolean(), regex() If true, remove non-alphanumeric characters. If a regex, use the first capture group as the "number" to dial.
timeout integer(3..) In seconds, how long to ring the device(s) (defaults to 30)

GET /v2/accounts/{ACCOUNT_ID}/devices/{DEVICE_ID}/quickcall/{PHONE_NUMBER}

curl -v -X GET \
    -H "X-Auth-Token: {AUTH_TOKEN}" \
    http://{SERVER}:8000/v2/accounts/{ACCOUNT_ID}/devices/{DEVICE_ID}/quickcall/{PHONE_NUMBER}
{
  "auth_token": "{AUTH_TOKEN}",
  "data": {
    "export_custom_channel_vars": [
      "Account-ID",
      "Retain-CID",
      "Authorizing-ID",
      "Authorizing-Type"
    ],
    "custom_channel_vars": {
      "authorizing_id": "{DEVICE_ID}",
      "authorizing_type": "device",
      "inherit_codec": "false",
      "retain_cid": "true",
      "account_id": "{ACCOUNT_ID}"
    },
    "continue_on_fail": false,
    "dial_endpoint_method": "simultaneous",
    "outbound_callee_id_number": "{DEVICE_CALLER_ID_NUMBER}",
    "outbound_callee_id_name": "{DEVICE_CALLER_ID_NAME}",
    "outbound_caller_id_number": "{E164_NUMBER}",
    "outbound_caller_id_name": "Device QuickCall",
    "media": "process",
    "ignore_early_media": true,
    "timeout": 30,
    "endpoints": [
      {
        "outbound_call_id": "{CALL_ID}-quickcall",
        "custom_channel_vars": {
          "auto_answer": true,
          "authorizing_id": "{DEVICE_ID}",
          "owner_id": "{USER_ID}",
          "account_id": "{ACCOUNT_ID}",
          "media_encryption_enforce_security": false,
          "sip_invite_domain": "{ACCOUNT_REALM}"
        },
        "custom_sip_headers": {
          "x_kazoo_aor": "sip:{DEVICE_SIP_USER}@{ACCOUNT_REALM}"
        },
        "presence_id": "{PRESENCE_ID}",
        "codecs": [
          "PCMU",
          "PCMA"
        ],
        "endpoint_id": "{DEVICE_ID}",
        "to_did": "{E164_NUMBER}",
        "to_realm": "{ACCOUNT_REALM}",
        "to_username": "{DEVICE_SIP_USER}",
        "to_user": "{DEVICE_SIP_USER}",
        "invite_format": "username"
      }
    ],
    "application_data": {
      "route": "{PHONE_NUMBER}"
    },
    "application_name": "transfer"
  },
  "status": "success",
  "request_id": "{REQUEST_ID}",
  "revision": "{REVISION}"
}

Adding Ringtones

You can setup internal and external ringtones by adding this:

{
    "name": "Device with custom ringtones",
    "ringtones": {
        "internal": "alert info SIP header",
        "external": "alert info SIP header"
    }
}

See, for instance, the Polycom example

Load a user's devices

Often you'll want to see what devices belong to a user, or devices that a user has hot-desked into.

Notice that the first device, {DEVICE_ID_1} is owned by {USER_ID} but the second device, {DEVICE_ID_2}, is owned by {OWNER_ID} and is currently hotdesked to {USER_ID} (see the "hotdesked":true attribute).

GET /v2/accounts/{ACCOUNT_ID}/users/{USER_ID}/devices

curl -v -X GET \
    -H "X-Auth-Token: {AUTH_TOKEN}" \
    http://{SERVER}:8000/v2/accounts/{ACCOUNT_ID}/users/{USER_ID}/devices
{
    "auth_token": "{AUTH_TOKEN}",
    "data": [
        {
            "device_type": "sip_device",
            "enabled": true,
            "hotdesked": false,
            "id": "{DEVICE_ID_1}",
            "mac_address": "",
            "name": "USER_ID_DEVICE",
            "owner_id": "{USER_ID}"
        },
        {
            "device_type": "sip_device",
            "enabled": true,
            "hotdesked": true,
            "id": "{DEVICE_ID_2}",
            "mac_address": "",
            "name": "OWNER_ID_DEVICE",
            "owner_id": "{OWNER_ID}"
        }
      ],
     "request_id": "{REQUEST_ID}",
     "revision": "{REVISION}",
     "status": "success"
}

Create an Authn-By-IP Device

Here is a minimal API request that creates a device that will authenticate by IP address instead of username/password

PUT /v2/accounts/{ACCOUNT_ID}/devices

    curl -v -X PUT \
    -H "X-Auth-Token: {AUTH_TOKEN}" \
    -H "Content-Type: application/json" \
    -d '{"data":{"enabled":true,"name":"authn_by_ip","sip":{"invite_format":"e164", "ip":"{IP_ADDRESS}","method":"ip"}}}' \
    http://{SERVER}:8000/v2/accounts/{ACCOUNT_ID}/devices
{
    "auth_token": "{AUTH_TOKEN}",
    "data": {
        "call_restriction": {},
        "caller_id": {},
        "contact_list": {},
        "dial_plan": {},
        "enabled": true,
        "exclude_from_queues": false,
        "id": "{DEVICE_ID}",
        "media": {
            "audio": {
                "codecs": [
                    "PCMU"
                ]
            },
            "encryption": {
                "enforce_security": false,
                "methods": []
            },
            "video": {
                "codecs": []
            }
        },
        "music_on_hold": {},
        "mwi_unsolicitated_updates": true,
        "name": "authn_by_ip",
        "register_overwrite_notify": false,
        "ringtones": {},
        "sip": {
            "invite_format": "e164",
            "ip": "{IP_ADDRESS}",
            "method": "ip",
            "registration_expiration": 300
        },
        "suppress_unregister_notifications": false
    },
    "request_id": "{REQUEST_ID}",
    "revision": "{REVISION}",
    "status": "success"
}

Edit this page here