- Overview
- Getting Started
- Reference
- AXL Developer Guide
- Overview
- AXL Compliance
- Cisco Product Security Overview
- Development Guidelines
- Recommendations for Developers
- New and Changed Information
- New and Changed Information for Unified CM Release 15
- New and Changed Information for Unified CM Release 14
- New and Changed Information for Unified CM Release 12.5(1)
- New and Changed Information for Unified CM Release 12.0(1)
- New APIs
- Changed APIs
- New and Changed Information for Unified CM Release 11.5(1)
- New and Changed Information for Unified CM Release 11.0(1)
- New and Changed Information for Unified CM Release 10.5(1)
- AXL Versioning Policy for Unified CM Release 10.5(1)
- Change Notification Feature for Unified CM Release 10.5(1)
- New Operations and Features for Unified CM Release 10.5(1)
- Versioning
- Backward Compatibility Best Practices
- AXL HTTP Request Basics
- 'Hello World' Sample Application
- Downloading the AXL Certificate
- Importing the AXL Certificate
- Running the Sample Application
- Authentication
- Handling AXL Unique IDs
- Data Throttling and Performance
- Using JSESSIONIDSSO to Improve Performance
- Re-Using HTTP Connections
- Data Change Notification
- Overview
- How It Works
- Details
- User Rank Interactions
- Overview
- Interaction Scenarios
- Compatibility Notes
- Error Messages
- 15 AXL Schema Reference
- 15 CUCM Data Dictionary
- Operations by Release
- Archived References
- AXL Developer Guide
- Tutorials
- Troubleshooting
- Developer Resources
- Community and Support
Overview
Administrative XML (AXL) is a powerful provisioning API to extend Cisco Unified Communications Manager (Unified CM). It can help businesses leverage their services to users by automating everyday communications configuration tasks. The AXL API provides a mechanism for programmers to make several types of changes to the Cisco Unified CM Database using XML and the SOAP interface.
Note: this guide covers AXL for CUCM versions 11.5 - 15. For earlier guides, see Archived References
AXL is a provisioning and configuration API, not a real-time API. Beware that an attempt to make too many AXL requests in quick succession could be throttled. See Data Throttling and Performance.
Examples of AXL operations include:
- add data
- apply data
- get data
- list data
- lockPhone
- remove data
- reset devices
- restart devices
- update data
- wipePhone
AXL API methods, known as requests, use a combination of HTTPS and SOAP. Users perform requests by sending XML data to the Unified CM Publisher server. If the request completes successfully, the system returns the appropriate AXL response. All responses are named the same as associated requests, except the word Response
is appended. For example, the XML response returned from an addPhone
request is named addPhoneResponse
.
Developers must have knowledge or experience in the following areas:
- TCP/IP Protocol
- Hypertext Transport Protocol, specifically HTTPS
- Socket programming
- XML
- SOAP
Users of the AXL API must have a firm grasp of XML syntax and schema, which is used to define AXL requests, responses, and errors.
For more information about XML schema, refer to https://www.w3.org/TR/xmlschema-0/.
For more information about XML syntax/grammar, refer to https://www.w3.org/TR/rdf-syntax-grammar/.
The AXL service is enabled by default on all nodes (Publisher and Subscribers.) It is recommended that developers always access AXL on the Publisher.
Caution The AXL API allows you to modify the CUCM system configuration database. Be careful not to delete or change objects unintentionally.
AXL Compliance
The Unified CM AXL implementation complies with XML Schema 1.0
The Unified CM AXL implementation also complies with SOAP 1.1 and HTTPS 1.1 as defined by the World Wide Web Consortium https://www.w3.org/. The AXL API runs as an independent service and can only be accessed via HTTPS.
Cisco Product Security Overview
This product contains cryptographic features and is subject to United States and local country laws governing import, export, transfer, and use.
Note: Delivery of Cisco cryptographic products does not imply third-party authority to import, export, distribute, or use encryption. Importers, exporters, distributors, and users are responsible for compliance with U.S. and local country laws. By using this product you agree to comply with applicable laws and regulations. If you are unable to comply with U.S. and local laws, return this product immediately.
A summary of U.S. laws governing Cisco cryptographic products may be found at: https://www.cisco.com/wwl/export/crypto/tool/stqrg.html. If you need further assistance, contact us by sending e-mail to export@cisco.com.
Development Guidelines
Recommendations for Developers
The following are recommendations for developers to reduce the number and extent of updates.
- Developers should never depend on the order of events or messages. The order of events and/or messages may change. For example:
- For a feature invocation involving two or more independent transactions, the events or messages may be interleaved.
- In such cases, events related to the second transaction may precede messages related to the first.
- Events or messages may be delayed due to situations beyond control of the interface, for example network or transport failures.
- Applications should be able to recover from out-of-order events or messages, even when the order is required for protocol operation.
- Developers must avoid unnecessary dependence on the order of elements to interpret information. The order of elements within the interface event or message may change, within the constraints of the protocol specification.
- Developers must disregard or provide generic treatments for any unknown elements or unknown values of known elements encountered. New interface events, methods, responses, headers, parameters, attributes, other elements, or new values of existing elements may be introduced.
- Previous interface events, methods, responses, headers, parameters, attributes, and other elements will remain and maintain their previous stated meaning and behavior in every way possible. They will remain consistent even when defects with them need to be corrected.
- Applications must never be dependent on interface behavior resulting from defects. That is, not consistent with the published interface specifications. Application behavior might change when a defect is fixed.
- Remove deprecated methods, handlers, events, responses, headers, parameters, attributes, or other elements from applications as soon as possible to avoid issues when those deprecated items are removed from Cisco Unified CM.
- Application developers must be aware that not all new features or new supported devices will be forward compatible. New features and devices (for example, phones) may require application modifications to work properly.
New and Changed Information
This section provides New and Changed Information for the Unified CM AXL Interface:
- New and Changed Information for Unified CM 15
- New and Changed Information for Unified CM 14
- New and Changed Information for Unified CM 12.5(1)
- New and Changed Information for Unified CM 12.0(1)
- New and Changed Information for Unified CM 11.5(1)
- New and Changed Information for Unified CM 11.0(1)
- New and Changed Information for Unified CM 10.5(1)
- New and Changed Information for Unified CM 10.0(1)
- New and Changed Information for Unified CM 9.1(1)
- New and Changed Information for Unified CM 9.0(1)
- New and Changed Information for Unified CM 8.6(1)
For a complete list of the AXL APIs and the versions of Cisco Unified Communications Manager in which they appear see the Operations by Release Matrix.
New and Changed Information for Unified CM Release 15
Notes:
- No API changes made for Unified CM Release 15
New and Changed Information for Unified CM Release 14
Notes:
XSI namespace attribute location for Nil elements
Prior to CUCM v14, if multiple elements in a response were
nil
(null), XMLSchemaInstance namespace attributes were added to each nil individual elementOld Behaviour
xmlCopy
<sshUserId xsi:nil="true" uuid="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> <sshPwd xsi:nil="true" uuid="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
In v14+, if any element in an AXL response body is nil, an XMLSchemaInstance namespace attribute will appear only in the parent/top-level AXL response name element:
xmlCopy
<ns:getPhoneResponse xmlns:ns="http://www.cisco.com/AXL/API/12.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <sshUserId uuid=""/> <sshPwd uuid=""/> </ns:getPhoneResponse>
Both representations are valid and logically/semantically equivalent per SOAP v1.1; however applications with hard-coded/inflexible response parsing may behave differently.
API | Changed Tags | Added Tags |
---|---|---|
getTransportSettings | proxyAuthenticationEnabled - proxyUserName - proxyPassword |
|
doUpdateTransportSettings | enableProxyAuthentication - proxyUserName - proxyPassword |
|
addUserProfileProvision | allowPhoneReassign | |
getUserProfileProvision | allowPhoneReassign | |
updateUserProfileProvision | allowPhoneReassign | |
listUserProfileProvision | allowPhoneReassign | |
listUser | customerName | |
addUser | associatedHeadsets | |
updateUser | associatedHeadsets - addAssociatedHeadsets - removeAssociatedHeadsets |
|
getUser | associatedHeadsets |
New and Changed Information for Unified CM Release 12.5(1)
New APIs
API | Operation | Added Tags |
---|---|---|
ExpresswayCConfiguration | Add Get List Update Remove |
HostNameOrIP description X509SubjectNameorSubjectAlternateName |
Customer | Add Get List Update Remove |
name createTime lastAuditTime |
PhoneActivationCode | Add List Remove |
activationCode activationCodeExpiry phoneName phoneDescription phoneModel enableActivationId userId |
DeviceDefaults | Get List Update |
Model Protocol LoadInformation InactiveLoadInformation DevicePoolName PhoneButtonTemplate VersionStamp PreferActCodeOverAutoReg |
MraServiceDomain | Add Get List Update Remove |
name isDefault serviceDomains |
CiscoCloudOnboarding | List Update |
voucherExists enablePushNotifications enableHttpProxy httpProxyAddress proxyUsername proxyPassword enableTrustCACertificate allowAnalyticsCollection enableTroubleshooting alarmSendEncryptedData orgId alarmPushIntervalSecs alarmEncryptKey serviceAddress onboardingRegistrationStatus partnerEmail orgName customerOneTimePassword alarmSeverity alarmPushNowToggle enableGDSCommunication mraActivationDomain errorStatus |
Changed APIs
API | Changed Tags | Added Tags |
---|---|---|
SipProfile | externalPresentationInfo - isAnonymous - presentationInfo externalPresentationNumber externalPresentationName |
|
CallManager | ports/sipPorts - sipOAuthPort - sipOAuthMRAPort |
|
DevicePool | mraServiceDomain | |
User | Removed from listUserRes presenceGroupName selfService ldapDirectoryName enableUserToHostConferenceNow attendeesAccessCode |
customerName |
ApplicationUserCapfProfile | keySize default value changed | |
EndUserCapfProfile | keySize default value changed | |
PhoneSecurityProfile | EnableOAuthAuthentication | |
Line | callingIdPresentationWhenDiverted externalPresentationInfo - isAnonymous - presentationInfo externalPresentationNumber externalPresentationName |
|
Phone | ecKeySize default value removed | enableActivationID activationIDStatus mraServiceDomain allowMraMode |
AudioCodecPreferenceList | codecNames maxOccurs changed to 31 | |
SipTrunk | Removed from listSipTrunkRes presenceGroupName |
externalPresentationInfo - isAnonymous - presentationInfo externalPresentationNumber externalPresentationName useOrigCallingPartyPresOnDivert |
ServiceProfile | jabberClientConfigurationProfileInfo | |
UserProfileProvision | allowProvisionEMMaxLoginTime | |
LicensedUser | Removed from listLicensedUserRes emEnabled |
New and Changed Information for Unified CM Release 12.0(1)
New APIs
API | Operation |
---|---|
VG224 | resetVG224 restartVG224 |
Gateway | retartGateway |
EnterpriseParameters | applyEnterpriseParameters resetEnterpriseParameters restartEnterpriseParameters |
UcService | applyUcService resetUcService restartUcService |
SmartLicensing | doSmartLicenseRegister doSmartLicenseReRegister doSmartLicenseDeRegister |
Changed APIs
API | Operation | Added Tags |
---|---|---|
User | get list add update |
ipccRoutePartition Removed tags accountType authenticationType |
Srst | get list add update |
ipv6Address |
PhoneNtp | get list add update |
ipv6Address |
UserProfileProvision | get add update |
enableMra mraPolicy_Desktop mraPolicy_Mobile |
UniversalLineTemplate | get add update |
noAnswerRingDuration |
RemoteDestination | get | ctiRemoteDeviceLineAssociations - pattern - routePartitionName - uuid - index |
SipProfile | get add update |
allowRRAndRSBandwidthModifier |
SipTrunk | get add update |
service parameterLabel originatingParameterValue terminatingParameterValue outboundUriRoutingInstructions |
H323Trunk | get add update |
rdnTransformationCssName useDevicePoolRdnTransformCss |
GatewayEndpointDigitalAccessBri | get add update |
unattendedPort enableDatalinkOnFirstCall |
GatewayEndpointDigitalAccessT1 | get add update |
calledPartyUnknownPrefix calledPartyUnknownStripDigits calledPartyUnknownTransformationCssName useDevicePoolCalledCssUnkn |
New and Changed Information for Unified CM Release 11.5(1)
New Features:
AXL Read-Only Role
The AXL user can now be assigned a read-only role, allowing the application to read (but not add/update/remove) AXL data. Refer to AXL Authentication for more details.
User Rank access control support
CUCM can be configured by the administrator to control the ability of users, including AXL API users, to access or update certain CUCM data, via the User Rank feature. The CUCM user account used by an application to authenticate to AXL is also subject to the access control restrictions of the User Rank feature, which may affect certain types of AXL requests. See User Rank Interactions for more details.
11.5 schema added
New APIs
API | Operation | Added Tags |
---|---|---|
EnterpriseParameters | doEnterpriseParametersReset | |
ServiceParameters | doServiceParametersReset | processNodeName service |
InfrastructureDevice | add update get list remove |
name ipv4Address bssidWithMask wapLocation isActive |
RegistrationDynamic | get list |
device lastKnownIpAddress lastKnownUcm lastKnownConfigVersion locationDetails endpointConnection portOrSsid lastSeen |
WirelessAccessPointControllers | add update get list remove |
name description snmpVersion snmpUserIdOrCommunityString snmpAuthenticationProtocol snmpAuthenticationPassword snmpPrivacyProtocol snmpPrivacyPassword syncNow resyncInterval nextSyncTime scheduleUnit |
LdapSearch | update get |
enableDirectorySearch distinguishedName password userSearchBase1 userSearchBase2 userSearchBase3 ldapFilterForUser enableRecursiveSearch primary seconday tertiary |
Changed APIs
API | Operation | Added Tags |
---|---|---|
SipProfile | add update get |
connectCallBeforePlayingAnnouncement faxInvite enableExternalQoS |
MohAudioSource | update get |
isExternalSource |
CredentialPolicy | add update get list |
minCharsToChange |
User | add update get |
pwdResetHackCount zeroHop |
H323Trunk | add update get |
connectCallBeforePlayingAnnouncement |
H323Gateway | add update get |
connectCallBeforePlayingAnnouncement |
UniversalDeviceTemplate | add update get |
certificateOperation |
HttpProfile | add update get |
username password requestTimeout retryCount |
IlsConfig | update | enableUsePassword |
LocalRouteGroup | update | uuid |
PhoneButtonTemplate | get | isFixedFeature |
PhoneTypeDisplayInstance | get | trunkType |
New and Changed Information for Unified CM Release 11.0(1)
- 11.0 schema added
New APIs
API | Operation | Added Tags |
---|---|---|
LicensedUser | list | userId firstName lastName snrEnabled deviceCount licenseType licenseUsed |
UnassignedDevice | list | name description deviceType licenseType extension |
UpdateLicenseUsage | doUpdateLicenseUsage | |
HttpProfile | add update get remove |
name uuid webServiceRootUri |
InteractiveVoiceResponse | update get list |
name uuid description devicePoolName locationName useTrustedRelayPoint serverName |
ConferenceNow | add update get list remove |
uuid conferenceNowNumber routePartitionName description maxWaitTimeForHost MohAudioSourceId |
ElinGroup | add update get list remove |
name uuid description elinNumbers - elinNumber -- pattern -- partition |
SecureConfig | update get |
name uuid value |
Changed APIs
API | Operation | Added Tags |
---|---|---|
ConferenceBridge | add update get |
allowCFBControlOfCallSecurityIcon |
RemoteDestination | add update get |
ringSchedule - member/ -- startTime -- endTime -- startDay -- endDay -- accessListName |
SipProfile | add update get |
startVideoPort stopVideoPort dscpForAudioCalls dscpForVideoCalls dscpForAudioPortionOfVideoCalls dscpForTelePresenceCalls dscpForAudioPortionOfTelePresenceCalls |
User | add update get |
enableUserToHostConferenceNow attendeesAccessCode |
FeatureGroupTemplate | add update get |
enableUserToHostConferenceNow |
DevicePool | add update get |
elinGroup |
Phone | add update get |
elinGroup |
H323Phone | add update get |
elinGroup |
GatewayEndpointAnalogAccess | add update get |
elinGroup |
TransPattern | add update get |
isEmergencyServiceNumber |
RoutePattern | add update get |
isEmergencyServiceNumber |
LdapDirectory | add update get |
synchronize ldapFilterForGroups |
ApplicationUserCapfProfile | add update get list |
keyOrder ecKeySize |
EndUserCapfProfile | add update get list |
keyOrder ecKeySize |
PhoneSecurityProfile | add update get list |
keyOrder ecKeySize |
UniversalDeviceTemplate | add update get list |
keyOrder ecKeySize |
New and Changed Information for Unified CM Release 10.5(1)
- 10.5 schema added
New APIs
API | Operation | Added Tags |
---|---|---|
LicensedUser | get | name uuid returnedTags |
Changed APIs
API | Changed Tags | added Tags |
---|---|---|
SipProfile | earlyOfferSupportForVoiceCall | earlyOfferSuppVoiceCall |
AXL Versioning Policy for Unified CM Release 10.5(1)
The versioning mechanism supports three major releases of schemas to provide additional upgrade flexibility. For example, Unified CM release 10 supports AXL schemas 8.x, 9.x, and 10.x, while the 7.x schema is no longer available. Each major and minor release will include a new schema. Maintenance releases never include new schemas. Old schemas will be deprecated in the first release of each new major version, for example Release 7.0(1). Read the details here.
Change Notification Feature for Unified CM Release 10.5(1)
Administrative XML (AXL) Clients depend on Cisco Unified CM data to work correctly. The AXL Change Notification Feature (CNF) is designed to help keep AXL applications informed when dependent data changes occur. Learn how to add Change Notification to your application here.
New Operations and Features for Unified CM Release 10.5(1)
Apply, Reset, and Restart API Operations
Note: Reset operations should be used with extreme caution, especially when applied to device pools, where large numbers of users can be impacted. Resetting a device makes it unavailable to the user until the operation is completed, since it interrupts service and shuts down the device or service entirely. Applying changes to device pools or several concurrent users simultaneously should only be managed at scheduled maintenance periods.
getOptionsList
getOptionsList allows interrogation of devices to determine valid options for that device. SipProfileOptions
, TransPatternOptions
, LineOptions
, PhoneOptions
, and DeviceProfileOptions
were provided as additional tools to help developers solve performance issues.
wipePhone
wipePhone
allows Cisco's newer Android-based devices like the Cisco DX650 to be remotely reset to factory defaults, removing user specific settings and data. This API is typically used when device ownership changes or when device access is compromised.
Versioning
Applications can make AXL requests specifying any one of several AXL schema versions offered by the AXL service in any given CUCM release. Use of AXL versioning enables developers to support multiple Unified CM releases and maintain backward compatibility after customer upgrades.
Applications can specify the specific schema version they wish to use by including a version number in the SOAPAction
header value and in the AXL XML namespace URI in the body of the request:
Header: SOAPAction: "CUCM:DB ver=14.0 getCCMVersion"
Body: xmlns:ns="http://www.cisco.com/AXL/API/14.0"
Both should be included, and must indicate the same version, for example:
Example HTTP Request Specifying schema version 14.0
CopyPOST https://sjds-cucm14.cisco.com:8443/axl/ HTTP/1.1
Content-Type: text/xml;charset=UTF-8
SOAPAction: "CUCM:DB ver=14.0 getCCMVersion"
Content-Length: 295
Authorization: Basic QaW5pcvcjpjaXNjb3BzZHQ=
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.cisco.com/AXL/API/14.0">
<soapenv:Header/>
<soapenv:Body>
<ns:getCCMVersion>
<processNodeName></processNodeName>
</ns:getCCMVersion>
</soapenv:Body>
</soapenv:Envelope>
If the application does not wish to specify any particular schema version for a request, it can omit the SOAPAction
header and include the special version 1.0
in the AXL XML namespace URI. In this case, CUCM will attempt to apply the lowest version supported by the CUCM release:
Example Requesting the Default/Oldest Version
CopyPOST https://sjds-cucm14.cisco.com:8443/axl/ HTTP/1.1
Content-Type: text/xml;charset=UTF-8
Content-Length: 295
Authorization: Basic QaW5pcvcjpjaXNjb3BzZHQ=
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://www.cisco.com/AXL/API/1.0">
<soapenv:Header/>
<soapenv:Body>
<ns:getCCMVersion>
<processNodeName></processNodeName>
</ns:getCCMVersion>
</soapenv:Body>
</soapenv:Envelope>
In the example above, if the request is sent to CUCM v14, AXL schema version 11.0 would be applied.
Schema Version Requested vs. Version Applied
Version String | 15.0 | 14.0 | 12.5 | 12.0 | 11.5 | 11.0 | 10.0 | 9.1 | 9.0 | 1.0 |
---|---|---|---|---|---|---|---|---|---|---|
CUCM 15 | 15 schema applied | 14 schema applied | 12.5(1) schema applied1 | 12.0 schema applied | 12.0 schema applied | |||||
CUCM 14 | 14 schema applied | 12.5(1) schema applied1 | 12.0 schema applied | 11.5(1) schema applied1 | 11.0 schema applied | 11.0 schema applied | ||||
CUCM 12.5(1) | 12.5(1) schema applied1 | 12.0 schema applied | 11.5(1) schema applied1 | 11.0 schema applied | 10.0 schema applied | 10.0 schema applied | ||||
CUCM 12.0(1) | 12.0 schema applied | 11.5(1) schema applied1 | 11.0 schema applied | 10.0 schema applied | 10.0 schema applied | |||||
CUCM 11.5(1) | 11.5(1) schema applied1 | 11.0 schema applied | 10.0 schema applied | 9.1 schema applied | 9.0 schema applied | 9.0 schema applied | ||||
CUCM 11.0(1) | 11.0 schema applied | 10.0 schema applied | 9.1 schema applied | 9.0 schema applied | 9.0 schema applied | |||||
CUCM 10.5(1) | 10.0 schema applied | 9.1 schema applied | 9.0 schema applied | 8.0 schema applied | ||||||
CUCM 10.0(1) | 10.0 schema applied | 9.1 schema applied | 9.0 schema applied | 8.0 schema applied | ||||||
CUCM 9.1(1) | 9.1 schema applied | 9.0 schema applied | 7.1 schema applied | |||||||
CUCM 9.0(1) | 9.0 schema applied | 7.1 schema applied |
112.5(1)SU3/11.5(1)SU10 schemas were modified to include new headset configuration objects.
Backward Compatibility Best Practices
Applications should always specify the desired schema version in the
SOAPAction
header and AXL XML namespace URI to ensure the expected schema is applied (see Versioning).If applications omit a
SOAPAction
header and specify AXL XML namespace URI version1.0
, the oldest schema version available will be applied.Applications should avoid using
<executeSQLQuery>
and<executeSQLUpdate>
when feasible, as these requests manipulate the CUCM database directly (via SQL) - this bypasses the AXL database abstraction layer provided by other (non-SQL) AXL requests. As the underlying CUCM database structure may change without notice in any CUCM release, applications should take care to validate<executeSQLQuery>
/<executeSQLUpdate>
response data, be prepared to handle unexpected request errors, and test against all (N.N.N) CUCM releases.New schema versions will be added in each CUCM major and minor release (N.N.n).
Maintenance/Service Releases (N.N.N) are not expected to include new schema versions.
Applications should plan to implement support as soon as possible for the latest schema versions available in CUCM major releases (N.n.n).
Old schema versions will be supported for two major CUCM releases (N-2).
Old schema versions will be removed only in major releases (N.n.n).
All old (N-3) schema versions will be removed in major CUCM releases. For example:
- CUCM 12.0(1): supports schema versions: 12.0/11.x/10.x; schema versions 9.x and older were removed.
- CUCM 12.5(1): supports schema versions: 12.x/11.x/10.x/9.x; no schema versions were removed.
Note: CUCM version numbering skipped version 13.x entirely.
AXL HTTP Request Basics
To make an AXL request, an application sends XML data - formatted according to the AXL schema - to the CUCM via HTTP POST
:
Request Details
Requests must be transmitted securely, using HTTPS 1.1/TLS 1.3+
By default, the AXL web service encrypts SSL communication using a self-signed public key certificate (see the Certificates in the Security Guide for Cisco Unified Communications Manager). Applications should be prepared to import/trust the AXL certificate (or disable certificate checking).
Requests are sent using the HTTP
POST
method.The
Content-Type
header should betext/xml
The
Accept
header should betext/xml
The
SOAPAction
header should contain the desired AXL version string (see Versioning).The request body should be
UTF-8
encoded.All requests should be sent to the CUCM cluster Publisher, via the AXL base URL:
Code SnippetCopy
https://{cucm_hostname}:8443/axl/
Note: the base URL trailing '
/
' is required
'Hello World' Sample Application
To get familiar with using AXL, let's try configuring and running a basic Java application.
Prerequisite: you will need to have a Java Development Kit (JDK) installed. This project was tested with OpenJDK 11.
As a first step, to keep everything in one place you will likely want to create a new, empty directory for storing/running the various sample project files.
For example, from a terminal:
Code SnippetCopy
mkdir axlsample cd axlsample
Downloading the AXL Certificate
Before making AXL requests, applications need to be prepared to make a secure SSL HTTPS connection to the AXL web service. If CUCM is using self-signed/admin-installed public key certificates to encrypt its SSL traffic, applications will likely need to download/install/import the CUCM tomcat
certifcate into their system in order to successfully establish connection.
Note: applications should always implement SSL client-side server certificate checking in production.
For this project, which will be using the HttpUrlConnection object from the Java Standard Library to send and receive XML over HTTP, we need to download the AXL certificate from CUCM and import it into a local Java TrustStore file:
In the CUCM admin web pages, navigate to Cisco Unified OS Administration -> Security -> Certificate Management
Then find and download the
tomcat
certificate, inPEM
format:Make sure to download the file into your sample project directory.
Importing the AXL Certificate
Java provides the keytool command for importing certificates into an encrypted TrustStore file, for use by java.net
SSL applications:
From a terminal window in your project directory, run the following command:
Code SnippetCopy
$JAVA_HOME/bin/keytool -keystore cacerts -alias tomcatcert -import -file tomcat.pem
Note: if
$JAVA_HOME
is not set, you can replace it with the full path to your Java installation.Specify the password as:
changeit
Then accept/complete the rest of the dialog.
This should result in a new file named
cacerts
in your project directory.
Running the Sample Application
The Java code for the sample is shown below:
hello_world.java
Copypublic class helloworld {
public static void main( String[] args ) throws java.io.IOException {
// String containing the AXL request XML. White space is for readability; ignored by AXL
String request = "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:ns='http://www.cisco.com/AXL/API/14.0'>"
+ "<soapenv:Header/>"
+ " <soapenv:Body>"
+ " <ns:getCCMVersion>"
+ " <processNodeName></processNodeName>"
+ " </ns:getCCMVersion>"
+ " </soapenv:Body>"
+ "</soapenv:Envelope>";
java.net.URL axlUrl = new java.net.URL( "https://cucm.abc.inc:8443/axl/" );
// SSL security prerequisite step: Import CUCM AXL Tomcat CA certificate into file 'cacerts'
// Set system SSL truststore to 'cacerts'; 'changeit' as the password:
System.setProperty( "javax.net.ssl.trustStore", "cacerts" );
System.setProperty( "javax.net.ssl.trustStorePassword", "changeit" );
java.net.HttpURLConnection connection = ( java.net.HttpURLConnection ) axlUrl.openConnection(); // Create a connection object
connection.setConnectTimeout( 20000 ); // Configure and read timeouts (in ms)
connection.setReadTimeout( 20000 );
connection.setDoOutput( true ); // Enable URLConnection for outbound requests
connection.setRequestMethod( "POST" ); // User HTTP POST
// Set HTTP Headers
connection.setRequestProperty( "Accept", "text/xml" );
connection.setRequestProperty( "Content-Type", "text/xml" );
connection.setRequestProperty( "SOAPAction", "CUCM:DB ver=14.0 getCCMVersion" ); // Request 14.0 AXL version
// Basic Auth encode the AXL user credentials
connection.setRequestProperty( "Authorization", "Basic " + java.util.Base64.getEncoder().encodeToString(
( "Administrator" + ":" + "password" ).getBytes( java.nio.charset.StandardCharsets.UTF_8 ) ) );
java.io.OutputStream outputStream = connection.getOutputStream(); // Make the TCP/SSL connection
outputStream.write( request.getBytes( "UTF-8" ) ); // Encode/send data/close connection
outputStream.flush();
outputStream.close();
java.io.InputStream inputStream = connection.getInputStream(); // Setup response stream
byte[] res = new byte[ 2048 ]; // Create 2048 byte buffer array
int i = 0;
StringBuilder response = new StringBuilder(); // Allows easy concatenation of strings
while ( ( i = inputStream.read( res ) ) != -1 ) { response.append( new String( res, 0, i ) ); } // Read until done (-1)
inputStream.close();
System.out.println( response.toString() );
}
}
Create a new file named
hello_world.java
in your project directory and copy/paste in the code. (Don't foget to save the file).From the terminal, use the Java compiler compile the
hello_world.java
source file:Code SnippetCopy
javac hello_world.java
Finally, you can run the compiled program:
Code SnippetCopy
java hello_world
Authentication
Refer to AXL Authentication.
Handling AXL Unique IDs
Most objects used in AXL requests or in the CUCM SQL database have a unique identification value in the form of a UUID. Many AXL requests can use an object's name or UUID when specifying the object. This identifier may be referred to as a UUID, PKID or primary key and is composed of a sequence of letters, dashes and numbers:
CopyF889E5C4-B277-4FE8-9749-932BC27D2401
In general, AXL responses will display/accept UUIDs surrounded by braces and using alpha characters in uppercase:
Copy<ldapAuthentication uuid="{A8D94FF0-4627-EECC-0D8D-E2EE69123B32}">
However, in the CUCM SQL database itself, primary key values are stored without braces and using lowercase alpha characters. As a result, when manipulating objects using <executeSqlQuery>
and <executeSqlUpdate>
, be sure to convert any UUIDs sent in the SQL statements to lowercase (remove braces,) and be prepared to handle bare lowercase UUIDs in responses:
<executeSqlQuery>
request snippet:
Copy<sql>select dnorpattern, description from numplan where pkid = "f056d852-7cb9-f197-cf7d-6fc34719d26c"</sql>
<executeSqlQuery>
response snippet:
Copy<return>
<row>
<name>DS-CUC115</name>
<pkid>d90b6466-1721-3bf2-d2f4-ca8eaac8e6f7</pkid>
</row>
<row>
<name>testLineGroup</name>
<pkid>a6ed4f3c-885f-971f-3c98-e20c2e1f4dc4</pkid>
</row>
</return>
Note: AXL requests (other than
<executeSqlQuery>
/<executeSqlUpdate>
) will accept UUIDs in either upper or lowercase, and with or without braces.
Data Throttling and Performance
The developer can make powerful modifications of the Unified CM System database using the AXL API. Caution should always be observed during implementation since every API call impacts the system. Requesting large amounts of data or performing multiple write operations may trigger the interface throttle to return an exception. The throttle protects system resources to ensure calls are processed before XML requests.
AXL acts as a provisioning and configuration API, not as a real-time API.
The AXL interface provides developers with two ways of accessing database objects:
- Standard methods which provide backward compatibility between releases, such as
GetUser
- Direct access through the
ExecuteSQLQuery
andExecuteSQLUpdate
methods, which do not provide backward compatibility.
The AXL service dynamically throttles write requests (add, update, and remove requests, and ExecuteSQLUpdate
) based on the current size of the Unified CM database transaction queue. Note that the Unified CM database transaction queue can contain pending updates arising from recent administrative actions, bulk administration tasks, and other AXL applications. If the database transaction queue is too large, AXL may reject new write requests with a 503: Service Unavailable
error message. In such cases, applications may retry rejected requests. However, retries should be attempted after a reasonable delay, for example several seconds.
Read requests are also dynamically throttled based on the size of the data set to be returned. Large queries issued using the List <object>
and ExecuteSQLQuery
methods that result in a data set greater than 8 MB will return Query request too large. Total rows matched: <Matched Rows>. Suggested row fetch: less than <Number of Rows>.
Cisco recommends developers using the ExecuteSQLQuery
method follow these guidelines:
- Applications should break up all SQL queries so that the data returned is always less than 8 MB
- Use the Unified CM Data Dictionary to help determine the maximum allowable size of any field in the database
- ASCII characters are stored as 1-byte
- i18n characters (UTF-8) are stored as 3-bytes
- DB has a mix of ASCII and UTF-8 characters
- While Unified CM is processing a large query, concurrent queries should not result in data sets larger than 2 MB
- Applications should wait to receive a response before issuing subsequent queries
- Applications should not submit duplicate queries
Note: Because AXL is not a real-time API, the auto-logout function of Extension Mobility (EM) does not work when the user is logged in or out of EM via the AXL interface.
Below are some example request and response pairs that show what to expect in different throttling scenarios.
Scenario 1
An AXL query request that tries to fetch more than 8 MB of data.
Request:
Copy<!--Scenario 1 Request-->
<soapenv:Envelope xmlns:soapenv="https://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="https://www.cisco.com/AXL/API/10.0">
<soapenv:Header />
<soapenv:Body>
<ns:executeSQLQuery sequence="?">
<sql>select * from enduser, device</sql>
</ns:executeSQLQuery>
</soapenv:Body>
</soapenv:Envelope>
Response:
Copy<!--Scenario 1 Response-->
<soapenv:Envelope xmlns:soapenv="https://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:Server</faultcode>
<faultstring>Query request too large. Total rows matched: 2816 rows. Suggestive Row Fetch: less than 844 rows</faultstring>
<detail>
<axlError>
<axlcode>-1</axlcode>
<axlmessage>Query request too large. Total rows matched: 2816 rows. Suggestive Row Fetch: less than 844 rows</axlmessage>
<request>executeSQLQuery</request>
</axlError>
</detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
Scenario 2
Too many concurrent ExecuteSQLQuery requests.
Request:
Copy<!--Scenario 2 Request: Too many concurrent ExecuteSQLQuery requests-->
<!--Request (repeated 3 times at the same time)-->
<soapenv:Envelope xmlns:soapenv="https://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="https://www.cisco.com/AXL/API/10.0">
<soapenv:Header />
<soapenv:Body>
<ns:executeSQLQuery sequence="?">
<sql>select first 999 * from device, enduser</sql>
</ns:executeSQLQuery>
</soapenv:Body>
</soapenv:Envelope>
Response:
Copy<!--Scenario 2 Response: Two requests are processed. The third request gives an error response.-->
<soapenv:Envelope xmlns:soapenv="https://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:Server</faultcode>
<faultstring>Maximum AXL Memory Allocation Consumed. Please retry once requests in progress have completed</faultstring>
<detail>
<axlError>
<axlcode>-1</axlcode>
<axlmessage>Maximum AXL Memory Allocation Consumed. Please retry once requests in progress have completed</axlmessage>
<request>executeSQLQuery</request>
</axlError>
</detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
Using JSESSIONIDSSO to Improve Performance
One way to streamline the performance of multiple sequential AXL operations is to reuse the JSESSIONIDSSO cookie returned with the first request. This allows you to use a single HTTP session (via HTTP 1.1 persistent connection) for making multiple AXL requests.
Here’s how it works: when you perform an AXL SOAP operation, it returns a JSESSIONIDSSO cookie in the response header. For example:
CopySet-Cookie: JSESSIONIDSSO=3D63989808D8A7FE32BE0D8BA; path=/; domain=.ds-ucm115-1.cisco.com; Secure; HttpOnly; Expires=Tue, 19 Jan 2038 03:14:07 GMT;
In order to continue to use the same authentication session with AXL (instead of creating a new session for each subsequent request,) you should return the same JSESSIONIDSSO cookie with subsequent requests, via the Cookie
header (note, omit the Authentication
header when using a JSESSIONSSO cookie.) As you continue using the same JSESSIONIDSSO, AXL will continue to use the same internal session, thus reducing the stress on CUCM when compared to creating new AXL sessions with every request.
CopyCookie: JSESSIONIDSSO=3D63989808D8A7FE32BE0D8BA; path=/; domain=.ds-ucm115-1.cisco.com; Secure; HttpOnly; Expires=Tue, 19 Jan 2038 03:14:07 GMT;
Note: You can re-use the AXL authentication session via JSESSIONIDSSO either within the same HTTP persistent connection session, or in separate HTTP connections/requests
The JSESSIONIDSSO has a default timeout of 30 minutes in AXL, but the timeout clock only starts ticking when the connection is idle. You could theoretically continue to use the same JSESSIONIDSSO indefinitely, or at least until you stop performing requests with that particular JSESSIONIDSSO for 30 minutes. If your JSESSIONIDSSO-based connection is idle for more than 30 minutes (i.e. you get an HTTP 404 response status code), make a new request without specifying a JSESSIONIDSSO while including the Authentication
header with credentials. This request should return a new JSESSIONIDSSO.
Re-Using HTTP Connections
Applications performaning multiple AXL requests should also implement HTTP 1.1 persistent connections with the AXL service. This will maintain and re-use the HTTP connection between app and AXL, which will make subsequent requests faster, and reduce memory/CPU and network object pressure for CUCM.
Data Change Notification
Overview
Administrative XML (AXL) clients may be dependent upon up-to-date Unified Cisco CM data to function properly. While apps can periodically request updated data from CUCM via AXL in a pull/polling model, the AXL Change Notification Feature (CNF) is designed to help keep AXL applications informed when CUCM data changes via a more push/notification-type mechanism. This section is intended to show AXL Developers how to add change notification functionality to their applications. Change notification features are applicable to Cisco Unified CM 10.0 and above.
How It Works
AXL will record changes for objects exposed within the AXL interface into an internal tracking cache. CUCM database changes are 'transformed', as they occur, from the raw table/column update data to their corresponding AXL object names, and a summary of the type of change (for example, add, update, remove) is then stored in the cache. The AXL client can then periodically retrieve the list of change summaries by calling the listChange
interface which returns all of the changes in the cache.
If an application is interested in the full details of a particular change, it may be necessary to perform the corresponding <getXXX>
request on the specific changed object. For example, if a change response indicates a change type of phone
and action of u
the application may want to perform a <getPhone>
request to ensure it has the latest, complete details for the device in question.
Details
Sample First Request
The first time the client calls the listChange
API, AXL returns all of the change notifications in the cache. AXL clients interested in changes for a specific set of objects should always specify the objectList
. Use of the objectList
tailors the response and reduces the overall load on the Publisher. There is no limit to the number of objects which can be specified in the objectList
. If the objectList
is not specified, AXL will return the list of changes for all objects in the cache.
Copy<!--sample first request-->
<soapenv:Envelope xmlns:soapenv="https://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="https://www.cisco.com/AXL/API/10.0">
<soapenv:Header/>
<soapenv:Body>
<ns:listChange>
<objectList>
<object>Phone</object>
<object>User</object>
</objectList>
</ns:listChange>
</soapenv:Body>
</soapenv:Envelope>
Sample First Response
The sample response shows AXL returned changes 1 to 10,000. The client is expected to ask for change 10,001 the next time it makes a request. Additionally, the queueID
must also be submitted. queueID
helps the client detect if changes may have been lost between sync intervals. Note that changes 2-10,000 are not shown in this example.
Each time a client calls listChange
, the response contains two sections. The first section is called queueInfo
which contains: firstChangeID
, lastChangeID
, nextStartChangeID
, and queueID
. The second section identifies the change.
Copy<!--sample response-->
<queueInfo>
<firstChangeId>154</firstChangeId>
<lastChangeId>10000</lastChangeId>
<nextStartChangeId>10001</nextStartChangeId>
<queueId>093249823498</queueId>
</queueInfo>
<changes>
<change type='physicalLocation' >uuid='8h58f047-7b40-4547-a8c2-fc5b2b668b7f'>
<id>1</id>
<action>u</action>
<doGet>false</doGet>
<changedTags>
<changedTag name='description'>A__V3.Dx.3 w_p6.</changedTag>
</changedTags>
</change>
</changes>
Queue Info tags
firstChangeId
The first (or oldest) change available in the cachelastChangeId
The last (or newest) change available in the cachenextStartChangeId
The next change record ID clients should specify in subsequentlistChange
requestsqueueId
A unique cache identifier which changes every time the AXL service is restarted
Change Type tags
changes
Indicates what changedid
The change identifier AXL assignedaction
Indicates the type change:u
is update,a
is add,r
is removedoGet
Boolean which indicates when the client should perform a Get operation for the object, typically because the object is new or when multiple attributes of the object were changed.changedTags
Indicates the details of the change
Sample Subsequent Request
The first time the client calls the listChange
API, the startChangeId
is not included. However, every subsequent listChange
request should include both a startChangeID
and queueID
. The nextStartChangeId
value received in the first response should be submitted as the startChangeId
in subsequent requests. Additionally, the queueId
received in the first response must also be included to help the client detect if changes may have been lost between sync intervals. Anytime the AXL service is restarted, a new queueID
is generated.
Copy<!--sample subsequent request-->
<soapenv:Envelope xmlns:soapenv="https://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="https://www.cisco.com/AXL/API/10.0">
<soapenv:Header/>
<soapenv:Body>
<ns:listChange>
<startChangeId queueId='093249823498'>10001</startChangeId>
<objectList> (optional)
<object>Phone</object>
<object>User</object>
</objectList>
</ns:listChange>
</soapenv:Body>
</soapenv:Envelope>
Sample Subsequent Response
The sample response shows AXL returned changes from 10,001 to 20,000 for queueID 093249823498. The client should ask for change 20,001 with the same queueID the next time it makes a request. Note that changes 10,005-20,000 are not shown in this example.
The <doGet> tag indicates when the client needs to perform a get <object> operation, typically when the object is newly added or when too many attributes for the object changed. In this example the client should perform a getPhone
request for uuid='4c48f047-7b40-4547-a8c2-fc5b2b668bda'.
Note: There may be multiple results for the same object. In this example the
PhysicalLocation
attribute for phone with uuid='8h58f047-7b40-4547-a8c2-fc5b2b668b7f' was updated, then removed.
Copy<!--sample subsequent response-->
<soapenv:Envelope xmlns:soapenv="https://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="https://www.cisco.com/AXL/API/10.0">
<soapenv:Body>
<ns:listChangeResponse>
<queueInfo>
<firstChangeId>10001</firstChangeId>
<lastChangeId>20000</lastChangeId>
<nextStartChangeId>20001</nextStartChangeId>
<queueId>093249823498</queueId>
</queueInfo>
<changes>
<change type='Phone' uuid='4c48f047-7b40-4547-a8c2-fc5b2b668bda'>
<id>10001</id>
<action>a</action>
<doGet>true</doGet>
</change>
<change type='PhysicalLocation' uuid='8h58f047-7b40-4547-a8c2-fc5b2b668b7f'>
<id>10002</id>
<action>u</action>
<doGet>false</doGet>
<changedTags>
<changedTag name = 'description'>A__V3.Dx.3 w_p6.</changedTag>
</changedTags>
</change>
<change type='PhysicalLocation' uuid='8h58f047-7b40-4547-a8c2-fc5b2b668b7f'>
<id>10003</id>
<action>r</action>
<doGet>false</doGet>
</change>
<change type='Phone' uuid='8g48f047-7b40-4547-a8c2-fc5b2b668b8d'>
<id>10004</id>
<action>u</action>
<doGet>false</doGet>
<changedTags>
<changedTag name='name'>SEP00000001</changedTag>
<changedTag name='description'>A__V.x.3 w_p6.</changedTag>
<changedTag name='versionStamp'>815abf2-1c0e-4</changedTag>
</changedTags>
</change>
</changes>
</ns:listChangeResponse>
</soapenv:Body>
</soapenv:Envelope>
Pagination Example
The client should always ask for the nextStartChangeId
whether or not the request was paged, so the client doesn't really need to detect if the request was paged. If lastChangeId
is greater than or equal to nextStartChangeId
, then the request was paged. The client can immediately request the nextStartChangeId
.
Copy<!--pagination example-->
<queueInfo>
<firstChangeId>100</firstChangeId>
<lastChangeId>10000</lastChangeId>
<nextStartChangeId>1001</nextStartChangeId>
<queueId>093249823498</queueId>
</queueInfo>
Polling Interval
The new AXL CNF has no restrictions on polling intervals. Requests are still subject to existing AXL throttles which limit each response to 8MB and all concurrent responses to 16MB.
The change queue cache is stored in memory and is limited to 100,000 changes. The cache can fill quickly depending on the types of changes performed. For example, if an XSI (IP Phone) Service has been configured for 10,000 phones and the service is deleted, the cache will include one entry representing the deletion of the service plus 10,000 phone updates indicating the service was removed from each device.
For a typical cluster, Cisco recommends AXL clients request listChange
every 1-15 minutes. On a very busy system, AXL clients should request changes often (between 1-5 minutes) to ensure all changes are communicated while still in the cache. If the client waits too long and the changeID
requested is no longer in the queue, AXL will return an error.
Error Conditions
listChange
requests which fail will return a HTTP 500 Internal Server Error
status code response, along with an explanatory <faultstring>
element. See the example below of an error response where an invalid queueId
was provided:
CopyHTTP/1.1 500 Internal Server Error
Content-Type: text/xml;charset=UTF-8
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="https://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="https://www.cisco.com/AXL/API/11.5">
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:Server</faultcode>
<faultstring>The queueId value does not match the server. This indicates that it is either incorrect or the server restarted and a full sync is needed.</faultstring>
<detail>
<ns2:axlError xmlns:ns2="https://www.cisco.com/AXL/API/11.5">
<axlcode>5007</axlcode>
<axlmessage>The queueId value does not match the server. This indicates that it is either incorrect or the server restarted and a full sync is needed.</axlmessage>
<request>listChange</request>
</ns2:axlError>
</detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
User Rank Interactions
Overview
Cisco Unified CM can be configured by the administrator to control the ability of users, including AXL API users, to access or update certain CUCM data, via the User Rank feature. The administrator may create and assign User Rank values to individual end-users, application-users, or user-groups, then restrict only certain User Ranks from updating specific CUCM data types. These User Ranks can be created and assigned with values ranging from 1-10, with 1 being the 'default' rank which has the highest level of access.
Note: User Rank is a feature that first appears in CUCM v11.5(1)SU1. More details can be found in the Documentation Supplement for Cisco Unified Communications Manager and IM and Presence Service, Release 11.5(1)SU1 and System Configuration Guide for Cisco Unified Communications Manager for releases later than v11.5(1).
The CUCM user account used by an application to authenticate to AXL is also subject to the access control restrictions of the User Rank feature, which may affect certain types of AXL requests.
Interaction Scenarios
If the administrator has configured a User Rank for the AXL user that is higher than 1 (non-default), for example a Rank of 2-10, keep in mind the following possible interactions when performing operations on the controlled object types of End Users, Application Users, User Groups, and LDAP Directories:
- Add requests will result in the new object having the same User Rank as the AXL user.
- Remove requests will fail if the User Rank of the AXL user is greater than the User Rank of the target object.
- Update requests which attempt to modify the User Group(s) associated to an object will fail if the User Rank of the AXL user is greater than the User Rank of the target object.
- executeSqlUpdate operations which attempt to modify database fields related to User Rank, or User Group Association, are only allowed if the AXL User Rank is 1, the 'default' value.
Compatibility Notes
Upon upgrade to v11.5(1)SU1, User Rank of all objects and users will default to 1, which means no restrictions due to the User Rank Feature will occur. This should mean all AXL users and applications will be unaffected by the User Rank feature unless the CUCM administrator intentionally increases the User Rank of the AXL user or target controlled objects.
However, as of CUCM v11.5(1)SU1, User Rank is not exposed by any requests or elements in the AXL schema. Exposing User Rank is planned for a later release. As a result, applications may have difficulty ascertaining the User Rank of the AXL user itself or the User Rank of objects on which operations are to be performed, making it hard to avoid attempting restricted operations. Applications should be prepared to sanely handle requests which fail due to User Rank restrictions, see Error Messages.
Note, it is possible to read the User Rank value of controlled objects via SQL, using the executeSqlQuery
request. See the Cisco Unified Communications Manager Data Dictionary for details on the tables and fields of the CUCM configuration database.
Error Messages
Requests which fail due to User Rank access restrictions will return a HTTP 500 Internal Server Error
status code response with an explanatory <faultstring>
element. See the example on the right of a error response where an AXL user having a User Rank of 3 attempts a <removeUser>
operation on an end user having User Rank of 1:
CopyHTTP/1.1 500 Internal Server Error
Content-Type: text/xml;charset=UTF-8
<soapenv:Envelope xmlns:soapenv="https://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:Server</faultcode>
<faultstring>You do not have the privilege to remove this End User as you have lower User Rank</faultstring>
<detail>
<axlError>
<axlcode>5003</axlcode>
<axlmessage>You do not have the privilege to remove this End User as you have lower User Rank</axlmessage>
<request>removeUser</request>
</axlError>
</detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>