RuhNet Provisioner for KAZOO

REST Api

Authentication

Authentication | Basic Auth

To use basic authentication, use the same credentials as you use for KAZOO. The account used to authenticate to the provisioner will have the same permissions as in KAZOO; i.e. a KAZOO reseller will be able to change phone settings for all it's child accounts.

Note: When using basic authentication, you MUST specify the account ID, either with the Auth-Account header, or via an auth_account query parameter. This should be the account you are working with, not necessarily the one containing the credentials you are using.

ALL METHODS
/api/{API_ENDPOINT}
curl -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/phones
curl -uKAZOOUSER:PASSWORD \
https://prov.mydomain.com/api/phones?auth_account=2b652a83c3d817224bf61fa26b251a94

Auth Parameters

Field Type Description
username Username

KAZOO admin user login username

password Password

KAZOO login password

Auth-Account HTTP_Header

Authentication token provided by the KAZOO API (Crossbar).

Authentication | Digest Auth

Digest authentication is only supported for phone provisioning and uploading of certain files, not to configure settings. The username is always the phone MAC address. The phone password is assigned to the phone by the provisioner, and is stored in the phone's KAZOO CouchDB entry inside the provision object. The User-Agent header must match what is specified in the phone model settings. Also, the MAC address must be active and already setup within KAZOO.

GET / PUT
/p/{API_ENDPOINT}
curl --digest -u0004f222abcd:zzAAbbCCpa$$word -H 'User-Agent: PolycomSoundPointIP-SPIP_335-UA' \
https://prov.mydomain.com/p/2b652a83c3d817224bf61fa26b251a94/0004f222abcd/0004f222abcd-main.cfg

Auth Parameters

Field Type Description
username Username

MAC address of the phone

password Password

Provisioning password from KAZOO device entry inside provision object.

User-Agent HTTP_Header

String subset of User-Agent required for authentication. Note: Some phones use a different User-Agent header for firmware downloads vs configuration provisioning, so only the common part of the User-Agent header string should be specified here.

Authentication | Token Auth

You may use an auth token from KAZOO API (Crossbar) to authenticate to the provisioner. The account used to authenticate to the provisioner will have the same permissions as in KAZOO; i.e. a KAZOO reseller will be able to change phone settings for all it's child accounts.

NOTE: The KAZOO API outputs different types of auth tokens depending on whether user/password or API key are used. Tokens generated from API key are NOT supported, only those generated from user/password authentications to Crossbar.

ALL METHODS
/api/{API_ENDPOINT}
curl -H 'X-Auth-Token: eyJhbGciOiJSUzIsInR5cCI6IkpXVCIsImtpZCI6IIl3lkhntjung4i3unhg90ug4u.....' \
https://prov.mydomain.com/api/phones

Auth Parameters

Field Type Description
username Username

KAZOO admin user login username

password Password

KAZOO login password

X-Auth-Token HTTP_Header

Authentication token provided by the KAZOO API (Crossbar).

PhoneSettings

PhoneSettings | All Phones - Get Settings

GET
/api/phones
curl -uKAZOOUSER:PASSWORD -H 'Content-Type: application/json' \
-H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/phones
HTTP/1.1 200 OK
{
  "data": {
    "polycom": {
      "id": "polycom",
      "name": "polycom",
      "settings": [],
      "families": {
        "spip": {
          "id": "polycom_spip",
          "name": "spip",
          "settings": [],
          "models": {
            "335": {
              "id": "polycom_spip_335",
              "name": "335",
              "settings": [
                {
                  "combo_keys": {
                    "quantity": 2
                  },
                  "content_type": "text/xml",
                  "feature_keys": {
                    "quantity": 4
                  },
                  "template_file": "polycom40.xcfg",
                  "token_use_limit": 5,
                  "user_agent": "PolycomSoundPointIP-SPIP_335-UA"
                }
              ]
            },
            "650": {
              "id": "polycom_spip_650",
              "name": "650",
              "settings": [
                {
                  "combo_keys": {
                    "quantity": 6
                  },
                  "content_type": "text/xml",
                  "feature_keys": {
                    "quantity": 9
                  },
                  "template_file": "polycom40.xcfg",
                  "token_use_limit": 5,
                  "user_agent": "PolycomSoundPointIP-SPIP_650-UA"
                }
              ]
            },
          }
        },
        "vvx": {
          "id": "polycom_vvx",
          "name": "vvx",
          "settings": [],
          "models": {
            "500": {
              "id": "polycom_vvx_500",
              "name": "500",
              "settings": [
                {
                  "combo_keys": {
                    "quantity": 12
                  },
                  "content_type": "text/xml",
                  "feature_keys": {
                    "quantity": 4
                  },
                  "template_file": "polycom59.xcfg",
                  "token_use_limit": 5,
                  "user_agent": "PolycomVVX-VVX_500-UA"
                }
              ]
            }
          }
        }
      }
    },
    "yealink": {
      "id": "yealink",
      "name": "yealink",
      "settings": [],
      "families": {
        "t4x": {
          "id": "yealink_t4x",
          "name": "t4x",
          "settings": [],
          "models": {
            "t42g": {
              "id": "yealink_t4x_t42g",
              "name": "t42g",
              "settings": [
                {
                  "combo_keys": {
                    "quantity": 15
                  },
                  "content_type": "text/xml",
                  "template_file": "yealink.xcfg",
                  "user_agent": "Yealink SIP-T42G"
                }
              ]
            }
          }
        }
      }
    }
  }
}

PhoneSettings | File Uploads (Device)

PUT to this endpoint to upload files. All files must conform to the specified example styles. Directory is omitted for ring files. When using admin credentials to upload files (rather than device user/password), the {MAC_ADDRESS} parameter in the URL is irrelevant and can be any string.
Although this endpoint can technically be used by admins to upload files, it is intended only for use by phone devices. The recommended way for administrators to upload files is via the standard file management API endpoint.

PUT
/p/{ACCOUNT_ID}/{MAC_ADDRESS}/{DIRECTORY}/{FILENAME}
curl --digest -u0004f222abcd:zzAAbbCCpa$$word -H 'User-Agent: PolycomSoundPointIP-SPIP_335-UA' \
https://prov.mydomain.com/p/2b652a83c3d817224bf61fa26b251a94/0004f222abcd/contacts/0004f222abcd-directory.xml
curl --digest -u0004f222abcd:zzAAbbCCpa$$word -H 'User-Agent: PolycomSoundPointIP-SPIP_335-UA' \
https://prov.mydomain.com/p/2b652a83c3d817224bf61fa26b251a94/0004f222abcd/overrides/0004f222abcd-phone.cfg
curl -X PUT -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
-d @my_yealink_custom_config.cfg \
https://prov.mydomain.com/p/2b652a83c3d817224bf61fa26b251a94/0004f222abcd/customconfigs/0004f222abcd-custom.cfg
curl -X PUT -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
-d @old_bell_ringing.mp3 \
https://prov.mydomain.com/p/2b652a83c3d817224bf61fa26b251a94/0000/ring21.mp3
curl -X PUT -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
-d @old_bell_ringing.mp3 \
https://prov.mydomain.com/p/2b652a83c3d817224bf61fa26b251a94/0004f222abcd/0004f222abcd-ring21.wav
curl -X PUT -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
-d @familypic.jpg \
https://prov.mydomain.com/p/2b652a83c3d817224bf61fa26b251a94/xyz/uploads/background123.jpg
0004f222abcd-custom.cfg
polycom_vvx_500.cfg yealink_t4x_t42s.cfg
0004f222abcd-directory.cfg
0004f222abcd-phone.cfg 0004f222abcd-web.cfg
ring16.wav ring17.mp3 0004f222abcd-ring19.wav 0004f222abcd-ring16.mp3
0004f222abcd-app.log 0004f222abcd-boot.log

PhoneSettings | Initial Token

This endpoint returns the initial token information and full default provisioning URL for an account.

GET
/api/{ACCOUNT_ID}/initialtoken
curl -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/initialtoken
HTTP/1.1 200 OK
{
  "status": 200,
  "data": {
    "token": "38a293b97b2825cf3af9a926562b02ea12f91534",
    "provision_url": "https://prov.mydomain.com/p/2b652a83c3d817224bf61fa26b251a94/38a293b97b2825cf3af9a926562b02ea12f91534"
  }
}

PhoneSettings | Phone Model - Get Settings

This endpoint returns settings for a particular phone model.

GET
/api/phones/{BRAND}/{FAMILY}/{MODEL}
curl -uKAZOOUSER:PASSWORD -H 'Content-Type: application/json' \
-H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/phones/polycom/vvx/500
HTTP/1.1 200 OK
{
  "_id": "polycom_vvx_500",
  "_rev": "2-f3b63e9d5e6d6be94f581ada27242685",
  "brand": "polycom",
  "family": "vvx",
  "model": "500",
  "settings": {
    "combo_keys": {
      "quantity": 12
    },
    "content_type": "text/xml",
    "feature_keys": {
      "quantity": 4
    },
    "template_file": "polycom59.xcfg",
    "token_use_limit": 5,
    "user_agent": "PolycomVVX-VVX_500-UA"
  }
}

PhoneSettings | Phone Models - Add

A PUT to this endpoint allows you to add a phone model to your provisioner instance.

The JSON data key is an array (within the brackets), so you may add a single phone, or as many as you like, separated by a comma.

PUT
/api/phones
curl -X PUT -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
-uKAZOOUSER:PASSWORD -H 'Content-Type: application/json' \
https://prov.mydomain.com/api/phones \
-d '{ "data":
  〔
    {
      "brand":"polycom",
      "family":"vvx",
      "model":"600",
      "settings": {
        "combo_keys":{ "quantity":12 },
        "feature_keys":{ "quantity":4 },
        "content_type":"text/xml",
        "template_file":"polycom59.xcfg",
        "user_agent":"PolycomVVX-VVX_600-UA",
        "token_use_limit":5,
        "firmware":{
          "version":"5.9.3682",
          "upgrades": [
            {"from":"5.7.45", "to":"5.8.1"},
            {"from":"5.4.7", "to":"5.4.7" }
          ]
        }
      }
    },
    {
      "brand":"yealink",
      "family":"t4x",
      "model":"t42s",
      "settings": {
        "combo_keys":{ "quantity":10 },
        "feature_keys":{ "quantity":4 },
        "user_agent":"Yealink SIP-T42S",
        "firmware":"66.86.0.160"
      }
    },
    {
      "brand":"yealink",
      "family":"t4x",
      "model":"t46u",
      "settings": {
        "combo_keys":{ "quantity":15 },
        "feature_keys":{ "quantity":4 },
        "user_agent":"Yealink SIP-T46U",
        "firmware":{
          "version":"108.86.0.70",
          "upgrades":[
            {"from":"~^108\\.83", "to":"108.84.0.10"},
            {"from":"108.84.0.35", "to":"108.84.0.10"},
            {"from":"108.84.0.10", "to":"108.85.0.90"}
          ]
        }
      }
    }
  〕
}'

Request Body

Field Type Description
data Object[]

Array of phone objects.

Phone Object

Field Type Description
brand String

Phone brand name (all lowercase).

family String

Phone family name (all lowercase).

model String

Phone model name (all lowercase).

settings Object

Model-specific settings.

  user_agent String

String subset of User-Agent that will be required for authentication.

  template_file optional String

Provisioning template filename. If not specified, a generic brand-specific template will be used (and must be present in the templates directory) e.g. yealink.xcfg, grandstream.xcfg.

  token_use_limit optional Number

Number of times the initial URL token can be used without a username/password before the phone auto-locks.

Default value: 3

  provisioning_protocol optional String

Set to 'PROTOCOL:[PORT]' to allow this phone model to provision over unencrypted HTTP (overrides the global allow_http_provisioning setting in the config file.) Example: HTTP or HTTP:8080
Use this setting with discretion to avoid data leakage and toll fraud!

Default value: HTTPS

  content_type optional String

Content type that the phone expects (text/xml is the default).

Default value: text/xml

  combo_keys optional Object

Combo Keys Object

    quantity optional Number

Number of line/combo keys on this phone.

  feature_keys optional Object

Feature Keys Object

    quantity optional Number

Number of feature keys on this phone.

  voicemail_code optional String

Voicemail code to use for this device model, if different than default.

  firmware optional Object|String

Firmware Object (or string)

    version optional String

Desired firmware version for this device model.

    upgrades optional []Object

An array of upgrade path objects for specific firmware versions to update to other specific versions. This way, you can avoid manually upgrading phones with certain bugs in particular firmware versions that require an upgrade or downgrade to a specific version before upgrading to a later version.
To lock a firmware version, set the from and to to the same value e.g. {"from":"5.4.7", "to":"5.4.7"}
In the API example shown, the last phone model being added is a Yealink T46U. For it, we specified a target firmware of 108.86.0.70, with three upgrade paths. T46U phones with firmware of 108.83.x.x (any version 83 firmware) will upgrade first to 108.84.0.10, then to 108.85.0.90, before finally upgrading to the desired version 108.86.0.70. T46U Phones with version 108.84.0.35 will first downgrade to 108.84.0.10 before going to 108.85.0.90 and then to the final version of 108.86.0.70.

      upgrade.from String

If this firmware is found on the device, the accompanying to entry will be the upgrade version. You may use a regular expression here, by prefixing the from string with a tilde ~ character.
Example: ~^66\.83 This will match any firmware version starting with 66.83.
Example: ~0\.15$ This will match any firmware ending in 0.15 like 66.84.0.15, 28.83.0.15, 28.84.40.15, 4.0.15 etc.
Note: Depending on your HTTP client you may need to use a double backslash \\ instead of single.

      upgrade.to String

This firmware version will be specified for the device to use, if the accompanying version in the from key is found on the device. Note: If you want to keep a model on a particular version that it has, set the same version for the from and to keys e.g.: {"from":"66.84.0.35", "to":"66.84.0.35"}. This particular example will lock this model to firmware 66.84.0.35 IF it already has that version on it, while devices with other firmware versions will upgrade to the version specified in settings.firmware.version.

HTTP/1.1 201 OK
{
  "data": {
    "total": 1,
    "successful": 1,
    "failed": 0,
    "message": "Success",
    "operations": [
      {
        "name": "polycom_vvx_600",
        "status": 201,
        "message": {
          "id": "polycom_vvx_600",
          "ok": true,
          "rev": "1-84ca0bfe2914f94342c11896ec3a59dc"
        }
      }
    ]
  }
}

PhoneSettings | Phone Models - Update

A POST to this endpoint allows you to update an existing phone model (or models) in your provisioner instance.

The JSON data key is an array (within the brackets), so you may update a single phone, or as many as you like, separated by a comma.

POST
/api/phones
curl -X POST -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
-uKAZOOUSER:PASSWORD -H 'Content-Type: application/json' \
https://prov.mydomain.com/api/phones \
-d '{ "data":
  [
    {
      "brand":"polycom",
      "family":"vvx",
      "model":"600",
      "settings": {
        "combo_keys":{ "quantity":12 },
        "feature_keys":{ "quantity":4 },
        "content_type":"text/xml",
        "template_file":"polycom59.xcfg",
        "user_agent":"PolycomVVX-VVX_600-UA",
        "token_use_limit":5,
        "firmware":{
          "version":"5.9.3682",
          "upgrades": [
            {"from":"5.7.45", "to":"5.8.1"},
            {"from":"5.4.7", "to":"5.4.7" }
          ]
        }
      }
    }
  ]
}'

Request Body

Field Type Description
data Object[]

Array of phone objects.

Phone Object

Field Type Description
brand String

Phone brand name (all lowercase).

family String

Phone family name (all lowercase).

model String

Phone model name (all lowercase).

settings Object

Model-specific settings.

  user_agent String

String subset of User-Agent that will be required for authentication.

  template_file optional String

Provisioning template filename. If not specified, a generic brand-specific template will be used (and must be present in the templates directory) e.g. yealink.xcfg, grandstream.xcfg.

  token_use_limit optional Number

Number of times the initial URL token can be used without a username/password before the phone auto-locks.

Default value: 3

  provisioning_protocol optional String

Set to 'PROTOCOL:[PORT]' to allow this phone model to provision over unencrypted HTTP (overrides the global allow_http_provisioning setting in the config file.) Example: HTTP or HTTP:8080
Use this setting with discretion to avoid data leakage and toll fraud!

Default value: HTTPS

  content_type optional String

Content type that the phone expects (text/xml is the default).

Default value: text/xml

  combo_keys optional Object

Combo Keys Object

    quantity optional Number

Number of line/combo keys on this phone.

  feature_keys optional Object

Feature Keys Object

    quantity optional Number

Number of feature keys on this phone.

  voicemail_code optional String

Voicemail code to use for this device model, if different than default.

  firmware optional Object|String

Firmware Object (or string)

    version optional String

Desired firmware version for this device model.

    upgrades optional []Object

An array of upgrade path objects for specific firmware versions to update to other specific versions. This way, you can avoid manually upgrading phones with certain bugs in particular firmware versions that require an upgrade or downgrade to a specific version before upgrading to a later version.
To lock a firmware version, set the from and to to the same value e.g. {"from":"5.4.7", "to":"5.4.7"}

      upgrade.from String

If this firmware is found on the device, the accompanying to entry will be the upgrade version. You may use a regular expression here, by prefixing the from string with a tilde ~ character.
Example: ~^66\.83 This will match any firmware version starting with 66.83.
Example: ~0\.15$ This will match any firmware ending in 0.15 like 66.84.0.15, 28.83.0.15, 28.84.40.15, 4.0.15 etc.
Note: Depending on your HTTP client you may need to use a double backslash \\ instead of single.

      upgrade.to String

This firmware version will be specified for the device to use, if the accompanying version in the from key is found on the device. Note: If you want to keep a model on a particular version that it has, set the same version for the from and to keys e.g.: {"from":"66.84.0.35", "to":"66.84.0.35"}. This particular example will lock this model to firmware 66.84.0.35 IF it already has that version on it, while devices with other firmware versions will upgrade to the version specified in settings.firmware.version.

HTTP/1.1 201 OK
{
  "data": {
    "total": 1,
    "successful": 1,
    "failed": 0,
    "message": "Success",
    "operations": [
      {
        "name": "polycom_vvx_600",
        "status": 201,
        "message": {
          "id": "polycom_vvx_600",
          "ok": true,
          "rev": "1-84ca0bfe2914f94342c11896ec3a59dc"
        }
      }
    ]
  }
}

DeviceSettings

DeviceSettings | Device Password Setting

This endpoint updates phone password settings for a specific device. By default, the phone device password is set to its MAC address.

GET / POST / DELETE
/api/{ACCOUNT_ID}/{MAC}/devicepassword
curl -X POST -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/0004f222abcd/devicepassword -d '{"data": {"password": "MySecretDeskPhonePassw0rd"} }'
curl -X GET -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/0004f222abcd/devicepassword

Request Body

Field Type Description
data Object

Data object.

  password String

Device Password

Default value: {Device MAC Address}

HTTP/1.1 200 OK
{
  "status":200,
  "message": "Updated device password for 0004f222abcd."
}

DeviceSettings | Dialplan Settings

This endpoint updates phone dialplan settings for a particular device. It will override other settings. It is stored on the device within Kazoo, in the provision.xprv_dial_settings object, so you may manage it through Kazoo's Crossbar API if you prefer.

GET / POST / DELETE
/api/{ACCOUNT_ID}/{MAC}/dialplan
curl -X POST -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/0004f222abcd/dialplan -d '{"data": {"digit_map": "[1-2]xxx|1[2-9]xxxxxxx|[2-9]xxxxxxx", "dial_delay": 5} }'
curl -X GET -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/0004f222abcd/dialplan

Request Body

Field Type Description
data Object

Data object.

  dial_delay Number

Timeout between digits for off-hook dialing.

  inter_digit_timeout Number

Timeout used for T in digit map.

  disallow_no_match Boolean

Don't allow dialing that doesn't comply with the digit map. (Phone model support varies.)

Default value: false

  no_on_hook_dial Boolean

Don't apply digit map to off-hook state. (Phone model support varies.)

Default value: false

HTTP/1.1 200 OK
{
  "status":200,
  "message": "Updated dialplan settings."
}

DeviceSettings | Extra SIP Lines

A POST to this endpoint allows you to add additional SIP accounts to a device, for external VoIP providers.

The input to the JSON data object is an array (within the brackets), so you may add a single external SIP line, or as many as your phone will support, separated by a comma.

Note that using this endpoint overwrites all previously configured extra lines.

POST
/api/{ACCOUNT_ID}/{MAC_ADDRESS}/lines
curl -X POST -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
-uKAZOOUSER:PASSWORD -H 'Content-Type: application/json' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/0004f222abcd/lines \
-d '{ "data":
  [
    {
      "realm":"sip.server.net",
      "user":"myusername",
      "password":"D0NTuseTh1sPa$$w0rd"
    },
    {
      "name":"My Home Asterisk Server",
      "realm":"home.mydomain.net",
      "user":"18425551234",
      "auth_user":"user_H762jDK02fj",
      "password":"D0NTuseTh1sPa$$w0rd"
      "label":"HomeAstr",
      "display_name":"Bob from Home",
      "transport":"TLS",
      "port":"50061",
      "encryption":true
    }
  ]
}'

Request Body

Field Type Description
data Object[]

Array of SIP line objects.

Line Object

Field Type Description
realm String

SIP realm/server/proxy to which to register this device.

user String

SIP user

password String

SIP password

name optional String

Name of this SIP line connection.

auth_user optional String

Authentication user, if different from user.

display_name optional String

Display name, sent with outbound calls (Primary line display name will be used if unspecified.)

label optional String

Label shown on phone screen ("Line#" will be used if unspecified.)

voicemail_code optional String

Voicemail code to use for this line, if different than default.

expire_seconds optional String

Registration timer (in seconds)

Default value: 300

transport optional String

Transport to use. Some, like NAPTR and DNSnaptr are equivalent, and some values are only supported on certain phones (TCPpreferred is Polycom specific). So, the closest compatible option for the phone model will automatically be used. In other words if you select TCPpreferred, and the phone is a Yealink (which doesn't support that option), TCP will be automatically used in the config file generation.

Default value: NAPTR

Allowed values: NAPTR, DNSnaptr, TLS, TCP, TCPOnly, TCPpreferred, UDPOnly, UDP

port optional String

Server port to use. If not specified it will be auto-selected based on transport.

encryption optional Boolean

Force encryption. If not specified, use of encyption is optional and will be determined based on transport and/or server capabilities. If encryption is set to true, and a transport incompatible with encryption (like UDP) has been selected, transport will be forced to TLS so that no unencrypted connection will be made.

Allowed values: true, false

primary_line_override optional Boolean

If set to true, this line will become the primary line on the phone and will replace the primary Kazoo line. Normally you would not want to do this, but it allows you to provision a phone that does not register to Kazoo.

Default value: false

Allowed values: true, false

HTTP/1.1 200 OK
{
  "status": 200,
  "data": {
    "message": "Added extra line information to device: 0004f222abcd  4ca3b8cd42afc9ba2e931fc2e8417f4b"
  }
}

AccountSettings

AccountSettings | Custom Config

This endpoint gets or updates phone settings for a particular account and/or brand and/or family and/or model. It is stored on the account document within Kazoo, in the provision object, so you may manage it through Kazoo's Crossbar API if you prefer. NOTE: THIS ENDPOINT IS IN ALPHA STAGE AND IS NOT COMPLETE!

GET / POST / DELETE
/api/{ACCOUNT_ID}/customconfig
curl -X POST -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/customconfig -d \
'{"data": {
    "yealink": {
      "t4x": {
        "t48u": {
          "features.config_dsskey_length": "2",
          "transfer.dsskey_deal_type": "2"
        }
      }
    }
 }'
curl -X GET -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/customconfig

Request Body

Field Type Description
data Object

Data object.

   Object

{brand} Brand object.

HTTP/1.1 200 OK
{
  "status":200,
  "message": "Custom config settings on account 2b652a83c3d817224bf61fa26b251a94",
  "data": {
    "yealink": {
      "t4x": {
        "t48u": {
          "features.config_dsskey_length": "2",
          "transfer.dsskey_deal_type": "2"
        }
      }
    },
    "t5x": {
      "t58w": {
         ... some previously added custom config for t58w...
      }
    }
  }
}

AccountSettings | Device Password

This endpoint updates phone password settings for an account. By default, the phone device password is set to its MAC address. Setting this will make all phones in an account get a single identical password.

GET / POST / DELETE
/api/{ACCOUNT_ID}/devicepassword
curl -X POST -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/devicepassword -d '{"data": {"password": "AcmeCorpPhonePassw0rd"} }'
curl -X GET -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/devicepassword

Request Body

Field Type Description
data Object

Data object.

  password String

Device Password

Default value: {Device MAC Address}

HTTP/1.1 200 OK
{
  "status":200,
  "message": "Successfully set devices password for account."
}

AccountSettings | Dialplan Settings

This endpoint updates phone dialplan settings for an account. It is stored on the account within Kazoo, in the provision.xprv_dial_settings object, so you may manage it through Kazoo's Crossbar API if you prefer.

GET / POST / DELETE
/api/{ACCOUNT_ID}/dialplan
curl -X POST -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/dialplan -d '{"data": {"digit_map": "[1-2]xxx|1[2-9]xxxxxxx|[2-9]xxxxxxx", "dial_delay": 5} }'
curl -X GET -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/dialplan

Request Body

Field Type Description
data Object

Data object.

  dial_delay Number

Timeout between digits for off-hook dialing.

  inter_digit_timeout Number

Timeout used for T in digit map.

  disallow_no_match Boolean

Don't allow dialing that doesn't comply with the digit map. (Phone model support varies.)

Default value: false

  no_on_hook_dial Boolean

Don't apply digit map to off-hook state. (Phone model support varies.)

Default value: false

HTTP/1.1 200 OK
{
  "status":200,
  "message": "Updated dialplan settings."
}

AccountSettings | File Management

GET to this endpoint to retrieve a file. DELETE to this endpoint to delete a file. PUT to this endpoint to upload a file. Arbitrary filenames are only supported in the "uploads" directory. All other filenames must conform to the specified example styles. Omission of the filename will show a list of files.

Account-specific config files are served to every phone of the same model on an account. They must be in the format {brand}_{family}_{model}.cfg. For example: account-level config for a Yealink T46S would be uploaded as yealink_t4x_t46s.cfg, or for a Polycom Soundpoint IP 450: polycom_spip_450.cfg. When the phones request their config, they'll for example ask for the file 0004f222abcd-account.cfg, and this account-specific model file will be served, after the model of the phone is looked up from the MAC address.

GET / PUT / DELETE
/api/{ACCOUNT_ID}/files/{DIRECTORY}/{FILENAME}
curl -X PUT -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/files/customconfigs/0004f222abcd-custom.cfg \
-d @bobs_phone_custom_settings.xml
curl -X DELETE -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/files/customconfigs/0004f222abcd-custom.cfg
curl -X PUT -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/files/accountconfigs/polycom_vvx_500.cfg \
-d @our_special_account_settings_polycom-VVX500.xml
curl -X GET -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/files/accountconfigs
curl -X PUT -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/files/contacts/0004f222abcd-directory.xml \
-d @company_xyz_directory.xml
curl -X GET -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/files/overrides/0004f222abcd-phone.cfg
curl -X PUT -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/files/ringtones/ring21.mp3 \
-d @old_bell_ringing.mp3
curl -X PUT -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/files/ringtones/0004f222abcd-ring21.wav \
-d @my_music_ringtone.mp3
curl -X PUT -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/files/uploads/background123.jpg \
-d @background123.jpg
0004f222abcd-custom.cfg
polycom_vvx_500.cfg yealink_t4x_t42s.cfg
0004f222abcd-directory.cfg
0004f222abcd-phone.cfg 0004f222abcd-web.cfg
ring16.wav ring17.mp3 0004f222abcd-ring19.wav 0004f222abcd-ring16.mp3
HTTP/1.1 201 Created
{
  "status": 201,
  "message": "File 'accountconfigs/polycom_vvx_500.cfg' (14kB) successfully uploaded."
}
HTTP/1.1 200 OK
{
  "status": 200,
  "message": "List of accountconfigs files on this account.",
  "data": {
    "files": [
      "polycom_vvx_500.cfg",
      "yealink_t4x_t46s.cfg"
    ],
  }
}
HTTP/1.1 200 OK
{
  "status": 200,
  "message": "File: customconfigs/0004f222abcd-custom.cfg successfully deleted."
}

AccountSettings | IP Address ACL

Instead of using a special initial-token based URL, IP authentication may be specified, on a per-account basis, so that phones from a particular IP address or network will be given access to the provisioner for initial provisioning. After initial provisioning, the phones will aquire their user/password and provision as normal. The token_use_limit parameter in the phone model's settings also applies to IP based provisioning attempts. The supplied net parameter must be an IP network in CIDR format. Single addresses may be added by using the /32 CIDR mask for IPv4, or /128 for IPv6.

GET / PUT / DELETE
/api/{ACCOUNT_ID}/acl
curl -X PUT -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/acl -d '{"data": {"net":"198.51.100.128/25"} }'
curl -X DELETE -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/acl -d '{"data": {"net":"2001:1a:4c9::18/128"} }'
curl -X GET -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/acl

Request Body

Field Type Description
data Object

Data object.

  net String

IP Network to add/delete from this account (in CIDR network format).

  ip_overrides_auth Boolean

Set to true to allow IP authentication indefinitely, even if user/pass auth fails, rather than just for initial setup. This setting is applied to the account. Not specifying it will disable.

Default value: false

HTTP/1.1 201 OK
{
  "status":201,
  "message": "Created IP ACL: 198.51.100.128/25",
  "data": {
    "account_id": "2b652a83c3d817224bf61fa26b251a94",
    "acls": [
      "203.0.113.0/24",
      "2001:1a:4c9::18/128",
      "198.51.100.128/25"
    ],
    "ip_overrides_auth":false
  }
}

DSSKeys

DSSKeys | List DSS Keys

This endpoint allows you to list DSS keys on a particular phone.

GET
/api/{ACCOUNT_ID}/{MAC_ADDRESS}/keys
curl -X GET -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/0004f222abcd/keys
HTTP/1.1 200 OK
{
  "status":200,
  "message": "Keys for device: polycom vvx 501 0004f222abcd",
  "data": {
    "combo_keys": {
      "0": {
        "position": 0,
        "type": "line",
        "label": "101",
      },
      "1": {
        "position":1,
        "type":"presence",
        "value":"105",
        "label":"Sally J",
        "extension":"105",
        "user_id":"6e96490ef67a11dcacd531ebfc6ca5ac"
      },
      "2": {
        "position":2,
        "type":"speed_dial",
        "value":"18005551212",
        "label":"BossCell",
      },
      "3": {
        "position":3,
        "type":"url",
        "value":"https://example.com/account2536/log_successful_sale?user=101_acmecorp",
        "label":"JACKPOT",
      }
    }
  }
}

DSSKeys | Remove All DSS and Feature Keys

This endpoint allows you to remove all DSS keys (combo keys) and feature keys from a particular phone.

DELETE
/api/{ACCOUNT_ID}/{MAC_ADDRESS}/resetdevkeys
curl -X DELETE -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/0004f222abcd/resetdevkeys'
HTTP/1.1 200 OK
{
  "status":200,
  "message": "success"
}

DSSKeys | Remove All Keys from Phones in Group

This endpoint allows you to remove all DSS keys (combo keys) and feature keys from all phones in a group.

DELETE
/api/{ACCOUNT_ID}/resetdevkeys/{GROUP}
curl -X DELETE -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/resetdevkeys/office'
HTTP/1.1 200 OK
{
  "status":200,
  "message": "success"
}

DSSKeys | Remove DSS Keys

This endpoint allows you to remove DSS keys from a particular phone.

DELETE
/api/{ACCOUNT_ID}/{MAC_ADDRESS}/keys
curl -X POST -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/0004f222abcd/keys -d '{"data": {"combo_keys":[ {"position":2}, {"position":3} ]}}'

Request Body

Field Type Description
data Object

Data object.

  combo_keys Object[]

Array of DSS key objects.

DSS Key

Field Type Description
position Number

Key position, zero indexed. The key in this position will be deleted.

Default value: 0

HTTP/1.1 200 OK
{
  "status":200,
  "message": "success"
}

DSSKeys | Set DSS Keys

This endpoint allows you to set DSS keys on a particular phone. By default, keys of type line are labeled with the following precedence:

  1. If the device is assigned to a user, label it with the user's extension.
  2. If the device is assigned to a user but the user has no extension, use the CLI that is set for the user.
  3. If the device is not assigned to a user, use the device's name. Note that some of the less standard keys (like URL) may not be supported on all phone brands or phone models.

POST
/api/{ACCOUNT_ID}/{MAC_ADDRESS}/keys
curl -X POST -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/0004f222abcd/keys -d '{"data": {"combo_keys":[{"position":0, "type":"line"}, {"position":1, "type":"presence", "label":"Sally J", "user_id":"6e96490ef67a11dcacd531ebfc6ca5ac"}, {"position":2, "type":"speed_dial", "value":"18005551212", "label":"BossCell"}, {"position":3, "type":"url", "label":"JACKPOT", "value":"https://example.com/account2536/log_successful_sale?user=101_acmecorp"} ]} }'

Request Body

Field Type Description
data Object

Data object.

  combo_keys Object[]

Array of DSS key objects.

DSS Key

Field Type Description
position Number

Key position, zero indexed.

Default value: 0

type String

Key type

Allowed values: line, presence, parking, speed_dial, blf, url, mwi, dtmf, transfer, hold, dnd, record, page, ringgroup

value String

Key action value.

label optional String

Label shown on the phone's display for this key.

user_id optional String

Kazoo user ID string. This is required when key type is presence. Note this is not the user's extension to monitor but the actual Kazoo user ID string. When this field is populated, you do not need to use the value field, since it will be overwritten.

extension optional String

Used for certain key types (such as blf and page) as a prefix, or pickup code, or page group.

HTTP/1.1 200 OK
{
  "status":200,
  "message": "success"
}

DeviceControl

DeviceControl | Remove Device Overrides

This is useful if an end-user has made changes to their phone configuration on the phone itself or via the phone's web interface. Using this endpoint will delete the override files. Before the override files are removed, a backup will be saved, so that you may manually restore them if needed.

DELETE
/api/{ACCOUNT_ID}/{MAC_ADDRESS}
curl -X DELETE -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/0004f222abcd
HTTP/1.1 202 OK
{
  {
    "status": 202,
    "message": "Successfully removed device override files for: 0004f222abcd 4ca3b8cd42afc9ba2e931fc2e8417f4b"
  }
}

DeviceControl | Remove Provision Lock

When an initial token has been used more than the quota (specified via the token_use_limit parameter in the model's settings), the device becomes locked against use of the initial token and will only provision with the proper username/password. If a phone is having trouble with initial provisioning, or needs to be factory reset at some point, you may use this endpoint to unlock the phone and allow the initial token to be used to provision it.

DELETE
/api/locks/{ACCOUNT_ID}/{MAC_ADDRESS}
curl -X DELETE -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/locks/0004f222abcd
HTTP/1.1 200 OK
{
  {
    "status": 200,
    "message": "Removed provision lock on device: 0004f222abcd 4ca3b8cd42afc9ba2e931fc2e8417f4b"
  }
}

DeviceControl | Send SIP Notify check-sync

This endpoint allows you to send a SIP Notify with check-sync to all phones in a group.

POST
/api/{ACCOUNT_ID}/checksync/{GROUP}
curl -X POST -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/checksync/office'
HTTP/1.1 200 OK
{
  "status":200,
  "message": "success"
}

Pivot

Pivot | Ring Group Login/Out Pivot

This endpoint allows you to

GET
/api/{ACCOUNT_ID}/pivot/ringgroup
curl -X GET -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/pivot/ringgroup
HTTP/1.1 200 OK
{
  "data": {
    "flow": {
      "data": {
        "id": "2fb171c688d68c1565936f7ed142bbc0" // menu QUERY
      },
      "module": "menu",
      "children": {
        "1": {
          "data": {
            "action": "login",
            "callflow_id": "b4f585f728558db2145822289c96a2e2" // ringgroup QUERY
          },
          "module": "ring_group_toggle",
          "children": {
            "_": {
              "data": {
                "presence_id": "123456",
                "status": "idle"
              },
              "module": "manual_presence",
              "children": {}
            }
          }
        },
        "2": {
          "data": {
            "action": "logout",
			  "callflow_id": "b4f585f728558db2145822289c96a2e2" // ringgroup QUERY
          },
          "module": "ring_group_toggle",
          "children": {
            "_": {
              "data": {
                "presence_id": "123456",
                "status": "busy"
              },
                   "module": "manual_presence",
                   "children": {}
               }
           }
       },
       "4": {
           "data": {
               "method": "POST",
               "req_timeout": "5",
               "req_format": "kazoo",
               "voice_url": "https://p.4x5.co/api/5c753d34b569423d55f11de1c9368d5f/pivot/ringgroup?ringgroup=12345abcd",
               "debug": false,
               "req_body_format": "form"
           },
           "module": "pivot",
           "children": {}
       },
       "5": {
           "data": {
               "action": "login",
               "retries": "3"
           },
           "module": "acdc_agent",
           "children": {}
       },
       "9": {
           "data": {
               "id": "42b887af37af7361fc0d57321f0e99e8",
               "priority": 1
           },
           "module": "acdc_member",
           "children": {}
    }
  }
}

Provisioning

Provisioning | Assign Device to User

This endpoint assigns a device to a user based on a hotdesk login. It can be used to help with mass-provisioning multiple phones to a location. A button can be assigned to a phone to call the URL. NOTE: When this endpoint is called, all combo keys on the device are removed. When the assignment takes place, the phone is sent a check-sync so that it will immediately update its configuration.

GET
/api/{ACCOUNT_ID}/assign/{MAC}
curl -X GET -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/assign/0004f222abcd
HTTP/1.1 200 OK
{
  "status":200,
  "message": "Assigned device abcdef12345678098765432abc767fe2/0004f222abcd to user abc15335be359ae8f2359d3264c925a3"
}

Provisioning | Bulk Create Devices

This endpoint takes a list of MAC addresses and creates multiple devices of a particular model. Each new created device will have two combo keys: LOGIN, and ASSIGN which can be used to set the device to it's proper owner.

PUT
/api/{ACCOUNT_ID}/bulkcreate
curl -X PUT -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/api/2b652a83c3d817224bf61fa26b251a94/bulkcreate -d \
'{
   "data": {
     "brand": "yealink",
     "family": "t5x",
     "model": "t58w",
     "macs": [
       "805ec001234",
       "805ec001220",
       "805ec002345",
       "805ec001a2b",
       "805ec0a12f9"
     ]
   }
 }'
HTTP/1.1 201 OK
{
 "data": {
   "total":5,
   "successful": 1,
   "failed": 0,
   "message": "Success",
   "devices": [
      {
        "mac_address": "805ec001234",
        "status": 201,
        "data": {
          "id": "8ce59f6677d36c819517b6f9ef5805ee",
          "name": "yealink_t42s_000_001234",
          "password": "1nvintjwp91wjAjUSdSg6EgY",
          "username": "user_y4lysxpljv5nywq"
        }
      },
      {
        "mac_address": "805ec001220",
        "status": 201,
        "data": {
          "id": "54e40e31654bb198ae442a475426a19a",
          "name": "yealink_t42s_001_001220",
          "password": "BjnWD5q2Oay9CDxC8MG41WcC",
          "username": "user_3lnzqrdsinjh4aq"
        }
      },
      {
        "mac_address": "805ec002345",
        "status": 201,
        "data": {
          "id": "4da169770875fcaec6c9f8a7868118e0",
          "name": "yealink_t42s_002_002345",
          "password": "O1NdyABGXIlzs7IC7oyQ5gQG",
          "username": "user_dmcy4aqriujzeaq"
        }
      },
      {
        "mac_address": "805ec001a2b",
         ...
      },
      {
        "mac_address": "805ec0a12f9",
         ...
      }
    ]
  }
}

Provisioning | Phone Provision - TEST

An admin-authenticated GET to this endpoint allows you to retrieve any file a phone would request, but will not make any modifcations to the KAZOO database concerning the device (useful for testing). You can request a provisioning file, such as 0004f222abcd-main.cfg or 0004f2000000-custom.cfg, or another supported type of file (ringtone, device firmware file, etc.)

GET
/p/{ACCOUNT_ID}/{MAC_ADDRESS}/{FILENAME}
curl -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/p/2b652a83c3d817224bf61fa26b251a94/0004f222abcd/0004f222abcd-main.cfg
curl -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/p/2b652a83c3d817224bf61fa26b251a94/0004f222abcd/0004f222abcd-custom.cfg
curl -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/p/2b652a83c3d817224bf61fa26b251a94/0004f222abcd/0004f222abcd-account.cfg
curl -uKAZOOUSER:PASSWORD -H 'Auth-Account: 2b652a83c3d817224bf61fa26b251a94' \
https://prov.mydomain.com/p/2b652a83c3d817224bf61fa26b251a94/0004f222abcd/0004f222abcd-ring18.wav

Provisioning | Phone Provision

This endpoint is where the phones get their files from the provisioner. Username (MAC address), phone password, and User-Agent header must all match what is in the database.

NOTE: If you manually use this endpoint (with curl etc.), the provisioner WILL change settings in the KAZOO database for the phone, so you may break settings and have to either factory reset the phone, or manually update credentials in the phone's web interface or directly on the phone.

GET
/p/{ACCOUNT_ID}/{MAC_ADDRESS}/{FILENAME}
curl --digest -u0004f222abcd:zzAAbbCCpa$$word -H 'User-Agent: PolycomSoundPointIP-SPIP_335-UA' \
https://prov.mydomain.com/p/2b652a83c3d817224bf61fa26b251a94/0004f222abcd/0004f222abcd-main.cfg
curl --digest -u0004f222abcd:zzAAbbCCpa$$word -H 'User-Agent: PolycomSoundPointIP-SPIP_335-UA' \
https://prov.mydomain.com/p/2b652a83c3d817224bf61fa26b251a94/0004f222abcd/0004f222abcd-custom.cfg
curl --digest -u0004f222abcd:zzAAbbCCpa$$word -H 'User-Agent: PolycomSoundPointIP-SPIP_335-UA' \
https://prov.mydomain.com/p/2b652a83c3d817224bf61fa26b251a94/0004f222abcd/0004f222abcd-account.cfg
curl --digest -u0004f222abcd:zzAAbbCCpa$$word -H 'User-Agent: PolycomSoundPointIP-SPIP_335-UA' \
https://prov.mydomain.com/p/2b652a83c3d817224bf61fa26b251a94/0004f222abcd/0004f222abcd-ring18.wav

XMLApplications

XMLApplications | Parked Calls

This endpoint provides an XML application for the phone to see and retrieve parked calls. The appropriate XML format will be sent based on the User-Agent header of the phone.

NOTE: If a User-Agent header is not present, Polycom XML format will be provided by default.

GET
/p/{ACCOUNT_ID}/apps/main.xml
curl --digest -u0004f222abcd:zzAAbbCCpa$$word -H 'User-Agent: Yealink SIP - T48S 2.83.108.84' \
https://prov.mydomain.com/p/2b652a83c3d817224bf61fa26b251a94/0004f222abcd/apps/main.xml
curl -uKAZOOUSER:PASSWORD -H 'User-Agent: Yealink-Something' \
https://prov.mydomain.com/p/2b652a83c3d817224bf61fa26b251a94/0004f222abcd/apps/main.xml

Generated with apidoc 1.2.0 - Tue Apr 22 2025 15:12:36 GMT-0400 (Eastern Daylight Time)