You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by sh...@apache.org on 2021/10/26 13:43:14 UTC

[trafficcontrol] branch master updated: for the api, renames root to unstable (#6312)

This is an automated email from the ASF dual-hosted git repository.

shamrick pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git


The following commit(s) were added to refs/heads/master by this push:
     new 7d7d21b  for the api, renames root to unstable (#6312)
7d7d21b is described below

commit 7d7d21bbcae94ce46176de19cd9b877ed103c490
Author: Jeremy Mitchell <mi...@users.noreply.github.com>
AuthorDate: Tue Oct 26 07:42:52 2021 -0600

    for the api, renames root to unstable (#6312)
---
 traffic_portal/app/src/common/api/ASNService.js    | 10 ++---
 traffic_portal/app/src/common/api/AuthService.js   |  8 ++--
 traffic_portal/app/src/common/api/CDNService.js    | 44 +++++++++++-----------
 .../app/src/common/api/CacheGroupService.js        | 16 ++++----
 .../app/src/common/api/CacheStatsService.js        |  4 +-
 .../app/src/common/api/CapabilityService.js        |  2 +-
 .../app/src/common/api/ChangeLogService.js         |  4 +-
 .../app/src/common/api/CoordinateService.js        |  8 ++--
 .../src/common/api/DeliveryServiceRegexService.js  | 10 ++---
 .../common/api/DeliveryServiceRequestService.js    | 20 +++++-----
 .../app/src/common/api/DeliveryServiceService.js   | 36 +++++++++---------
 .../common/api/DeliveryServiceSslKeysService.js    | 10 ++---
 .../src/common/api/DeliveryServiceStatsService.js  |  6 +--
 .../api/DeliveryServiceUriSigningKeysService.js    |  4 +-
 .../common/api/DeliveryServiceUrlSigKeysService.js |  6 +--
 .../app/src/common/api/DivisionService.js          | 10 ++---
 .../app/src/common/api/EndpointService.js          |  2 +-
 .../src/common/api/FederationResolverService.js    |  6 +--
 .../app/src/common/api/FederationService.js        | 24 ++++++------
 traffic_portal/app/src/common/api/JobService.js    |  6 +--
 traffic_portal/app/src/common/api/OriginService.js |  8 ++--
 .../app/src/common/api/ParameterService.js         | 12 +++---
 .../app/src/common/api/PhysLocationService.js      | 10 ++---
 .../app/src/common/api/ProfileParameterService.js  |  6 +--
 .../app/src/common/api/ProfileService.js           | 22 +++++------
 traffic_portal/app/src/common/api/RegionService.js | 10 ++---
 traffic_portal/app/src/common/api/RoleService.js   |  8 ++--
 .../app/src/common/api/ServerCapabilityService.js  | 14 +++----
 traffic_portal/app/src/common/api/ServerService.js | 28 +++++++-------
 .../app/src/common/api/ServiceCategoryService.js   | 10 ++---
 .../app/src/common/api/StaticDnsEntryService.js    | 10 ++---
 traffic_portal/app/src/common/api/StatusService.js | 10 ++---
 traffic_portal/app/src/common/api/TenantService.js | 10 ++---
 traffic_portal/app/src/common/api/ToolsService.js  |  4 +-
 .../app/src/common/api/TopologyService.js          | 12 +++---
 .../app/src/common/api/TrafficPortalService.js     |  2 +-
 traffic_portal/app/src/common/api/TypeService.js   | 14 +++----
 traffic_portal/app/src/common/api/UserService.js   | 14 +++----
 traffic_portal/app/src/scripts/config.js           |  2 +-
 39 files changed, 221 insertions(+), 221 deletions(-)

diff --git a/traffic_portal/app/src/common/api/ASNService.js b/traffic_portal/app/src/common/api/ASNService.js
index aaadee8..e25552d 100644
--- a/traffic_portal/app/src/common/api/ASNService.js
+++ b/traffic_portal/app/src/common/api/ASNService.js
@@ -20,7 +20,7 @@
 var ASNService = function($http, $q, locationUtils, messageModel, ENV) {
 
     this.getASNs = function(queryParams) {
-        return $http.get(ENV.api['root'] + 'asns', {params: queryParams}).then(
+        return $http.get(ENV.api.unstable + 'asns', {params: queryParams}).then(
             function(result) {
                 return result.data.response;
             },
@@ -32,7 +32,7 @@ var ASNService = function($http, $q, locationUtils, messageModel, ENV) {
     };
 
     this.getASN = function(id) {
-        return $http.get(ENV.api['root'] + 'asns', {params: {id: id}}).then(
+        return $http.get(ENV.api.unstable + 'asns', {params: {id: id}}).then(
             function(result) {
                 return result.data.response[0];
             },
@@ -44,7 +44,7 @@ var ASNService = function($http, $q, locationUtils, messageModel, ENV) {
     };
 
     this.createASN = function(asn) {
-        return $http.post(ENV.api['root'] + 'asns', asn).then(
+        return $http.post(ENV.api.unstable + 'asns', asn).then(
             function(result) {
                 messageModel.setMessages([{level: 'success', text: 'ASN created' }], true);
                 console.info("created new ASN: ", result.data.response);
@@ -59,7 +59,7 @@ var ASNService = function($http, $q, locationUtils, messageModel, ENV) {
     };
 
     this.updateASN = function(asn) {
-        return $http.put(ENV.api['root'] + 'asns', asn, {params: {id: asn.id}}).then(
+        return $http.put(ENV.api.unstable + 'asns', asn, {params: {id: asn.id}}).then(
             function(result) {
                 messageModel.setMessages([{level: 'success', text: 'ASN updated'}], false);
                 console.info('updated ASN: ', result.data.response);
@@ -73,7 +73,7 @@ var ASNService = function($http, $q, locationUtils, messageModel, ENV) {
     };
 
     this.deleteASN = function(id) {
-        return $http.delete(ENV.api['root'] + 'asns', {params: {id: id}}).then(
+        return $http.delete(ENV.api.unstable + 'asns', {params: {id: id}}).then(
             function(result) {
                 messageModel.setMessages(result.data.alerts, true);
                 return result;
diff --git a/traffic_portal/app/src/common/api/AuthService.js b/traffic_portal/app/src/common/api/AuthService.js
index 8fee5b8..ef5a97e 100644
--- a/traffic_portal/app/src/common/api/AuthService.js
+++ b/traffic_portal/app/src/common/api/AuthService.js
@@ -21,7 +21,7 @@ var AuthService = function($rootScope, $http, $state, $location, userModel, mess
 
     this.login = function(username, password) {
         userModel.resetUser();
-        return $http.post(ENV.api['root'] + 'user/login', { u: username, p: password }).then(
+        return $http.post(ENV.api.unstable + 'user/login', { u: username, p: password }).then(
             function(result) {
                 $rootScope.$broadcast('authService::login');
                 const redirect = decodeURIComponent($location.search().redirect);
@@ -41,7 +41,7 @@ var AuthService = function($rootScope, $http, $state, $location, userModel, mess
 
     this.tokenLogin = function(token) {
         userModel.resetUser();
-        return $http.post(ENV.api['root'] + "user/login/token", { t: token }).then(
+        return $http.post(ENV.api.unstable + "user/login/token", { t: token }).then(
             function(result) {
                 $rootScope.$broadcast('authService::login');
                 return result;
@@ -53,7 +53,7 @@ var AuthService = function($rootScope, $http, $state, $location, userModel, mess
     };
 
     this.oauthLogin = function(authCodeTokenUrl, code, clientId, redirectUri) {
-        return $http.post(ENV.api['root'] + 'user/login/oauth', { authCodeTokenUrl: authCodeTokenUrl, code: code, clientId: clientId, redirectUri: redirectUri})
+        return $http.post(ENV.api.unstable + 'user/login/oauth', { authCodeTokenUrl: authCodeTokenUrl, code: code, clientId: clientId, redirectUri: redirectUri})
             .then(
                 function(result) {
                     $rootScope.$broadcast('authService::login');
@@ -78,7 +78,7 @@ var AuthService = function($rootScope, $http, $state, $location, userModel, mess
 
     this.logout = function() {
         userModel.resetUser();
-        return $http.post(ENV.api['root'] + 'user/logout').then(
+        return $http.post(ENV.api.unstable + 'user/logout').then(
             function(result) {
                 $rootScope.$broadcast('trafficPortal::exit');
                 if ($state.current.name == 'trafficPortal.public.login') {
diff --git a/traffic_portal/app/src/common/api/CDNService.js b/traffic_portal/app/src/common/api/CDNService.js
index 0b81350..3908809 100644
--- a/traffic_portal/app/src/common/api/CDNService.js
+++ b/traffic_portal/app/src/common/api/CDNService.js
@@ -20,7 +20,7 @@
 var CDNService = function($http, locationUtils, messageModel, ENV) {
 
     this.getCDNs = function(all) {
-        return $http.get(ENV.api['root'] + 'cdns').then(
+        return $http.get(ENV.api.unstable + 'cdns').then(
             function(result) {
                 let response;
                 if (all) { // there is a CDN called "ALL" that is not really a CDN but you might want it...
@@ -40,7 +40,7 @@ var CDNService = function($http, locationUtils, messageModel, ENV) {
 
 
     this.getCDN = function(id) {
-        return $http.get(ENV.api['root'] + 'cdns', {params: {id: id}}).then(
+        return $http.get(ENV.api.unstable + 'cdns', {params: {id: id}}).then(
             function(result) {
                 return result.data.response[0];
             },
@@ -51,7 +51,7 @@ var CDNService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.createCDN = function(cdn) {
-        return $http.post(ENV.api['root'] + 'cdns', cdn).then(
+        return $http.post(ENV.api.unstable + 'cdns', cdn).then(
             function(result) {
                 messageModel.setMessages(result.data.alerts, true);
                 locationUtils.navigateToPath('/cdns');
@@ -66,7 +66,7 @@ var CDNService = function($http, locationUtils, messageModel, ENV) {
 
     // todo: change to use query param when it is supported
     this.updateCDN = function(cdn) {
-        return $http.put(ENV.api['root'] + 'cdns/' + cdn.id, cdn).then(
+        return $http.put(ENV.api.unstable + 'cdns/' + cdn.id, cdn).then(
             function(result) {
                 messageModel.setMessages(result.data.alerts, false);
                 return result;
@@ -80,7 +80,7 @@ var CDNService = function($http, locationUtils, messageModel, ENV) {
 
     // todo: change to use query param when it is supported
     this.deleteCDN = function(id) {
-        return $http.delete(ENV.api['root'] + 'cdns/' + id).then(
+        return $http.delete(ENV.api.unstable + 'cdns/' + id).then(
             function(result) {
                 return result.data;
             },
@@ -92,7 +92,7 @@ var CDNService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.queueServerUpdates = function(id) {
-        return $http.post(ENV.api['root'] + 'cdns/' + id + '/queue_update', {action: "queue"}).then(
+        return $http.post(ENV.api.unstable + 'cdns/' + id + '/queue_update', {action: "queue"}).then(
             function(result) {
                 messageModel.setMessages([{level: 'success', text: 'Queued CDN server updates'}], false);
                 return result;
@@ -105,7 +105,7 @@ var CDNService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.clearServerUpdates = function(id) {
-        return $http.post(ENV.api['root'] + 'cdns/' + id + '/queue_update', {action: "dequeue"}).then(
+        return $http.post(ENV.api.unstable + 'cdns/' + id + '/queue_update', {action: "dequeue"}).then(
             function(result) {
                 messageModel.setMessages([{ level: 'success', text: 'Cleared CDN server updates'}], false);
                 return result;
@@ -118,7 +118,7 @@ var CDNService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.getCapacity = function() {
-        return $http.get(ENV.api['root'] + 'cdns/capacity').then(
+        return $http.get(ENV.api.unstable + 'cdns/capacity').then(
             function(result) {
                 return result.data.response;
             },
@@ -129,7 +129,7 @@ var CDNService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.getRoutingMethods = function() {
-        return $http.get(ENV.api['root'] + 'cdns/routing').then(
+        return $http.get(ENV.api.unstable + 'cdns/routing').then(
             function(result) {
                 return result.data.response;
             },
@@ -140,7 +140,7 @@ var CDNService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.getCurrentStats = function() {
-        return $http.get(ENV.api['root'] + 'current_stats').then(
+        return $http.get(ENV.api.unstable + 'current_stats').then(
             function(result) {
                 if (result) {
                     return result.data.response;
@@ -154,7 +154,7 @@ var CDNService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.getCurrentSnapshot = function(cdnName) {
-       return $http.get(ENV.api['root'] + 'cdns/' + cdnName + '/snapshot').then(
+       return $http.get(ENV.api.unstable + 'cdns/' + cdnName + '/snapshot').then(
             function(result) {
                 return result.data.response;
             },
@@ -165,7 +165,7 @@ var CDNService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.getNewSnapshot = function(cdnName) {
-        return $http.get(ENV.api['root'] + 'cdns/' + cdnName + '/snapshot/new').then(
+        return $http.get(ENV.api.unstable + 'cdns/' + cdnName + '/snapshot/new').then(
             function(result) {
                 return result.data.response;
             },
@@ -176,7 +176,7 @@ var CDNService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.snapshot = function(cdn) {
-        return $http.put(ENV.api['root'] + 'snapshot', undefined, {params: {cdnID: cdn.id}}).then(
+        return $http.put(ENV.api.unstable + 'snapshot', undefined, {params: {cdnID: cdn.id}}).then(
             function(result) {
                 messageModel.setMessages([{level: 'success', text: 'Snapshot performed'}], true);
                 locationUtils.navigateToPath('/cdns/' + cdn.id);
@@ -190,7 +190,7 @@ var CDNService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.getDNSSECKeys = function(cdnName) {
-        return $http.get(ENV.api['root'] + 'cdns/name/' + cdnName + '/dnsseckeys').then(
+        return $http.get(ENV.api.unstable + 'cdns/name/' + cdnName + '/dnsseckeys').then(
             function(result) {
                 return result.data.response;
             },
@@ -201,7 +201,7 @@ var CDNService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.generateDNSSECKeys = function(dnssecKeysRequest) {
-        return $http.post(ENV.api['root'] + 'cdns/dnsseckeys/generate', dnssecKeysRequest).then(
+        return $http.post(ENV.api.unstable + 'cdns/dnsseckeys/generate', dnssecKeysRequest).then(
             function(result) {
                 return result;
             },
@@ -213,7 +213,7 @@ var CDNService = function($http, locationUtils, messageModel, ENV) {
     };
 
 	this.regenerateKSK = function(kskRequest, cdnKey) {
-		return $http.post(ENV.api['root'] + 'cdns/' + cdnKey + '/dnsseckeys/ksk/generate', kskRequest).then(
+		return $http.post(ENV.api.unstable + 'cdns/' + cdnKey + '/dnsseckeys/ksk/generate', kskRequest).then(
 			function(result) {
 				return result;
 			},
@@ -225,7 +225,7 @@ var CDNService = function($http, locationUtils, messageModel, ENV) {
 	}
 
     this.getNotifications = function(queryParams) {
-        return $http.get(ENV.api['root'] + 'cdn_notifications', { params: queryParams }).then(
+        return $http.get(ENV.api.unstable + 'cdn_notifications', { params: queryParams }).then(
             function(result) {
                 return result.data.response;
             },
@@ -236,7 +236,7 @@ var CDNService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.createNotification = function(cdn, notification) {
-        return $http.post(ENV.api['root'] + 'cdn_notifications', { cdn: cdn.name, notification: notification}).then(
+        return $http.post(ENV.api.unstable + 'cdn_notifications', { cdn: cdn.name, notification: notification}).then(
             function(result) {
                 return result;
             },
@@ -248,7 +248,7 @@ var CDNService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.deleteNotification = function(queryParams) {
-        return $http.delete(ENV.api['root'] + 'cdn_notifications', { params: queryParams }).then(
+        return $http.delete(ENV.api.unstable + 'cdn_notifications', { params: queryParams }).then(
             function(result) {
                 return result;
             },
@@ -260,7 +260,7 @@ var CDNService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.getLocks = function(queryParams) {
-        return $http.get(ENV.api['root'] + 'cdn_locks', { params: queryParams }).then(
+        return $http.get(ENV.api.unstable + 'cdn_locks', { params: queryParams }).then(
             function(result) {
                 return result.data.response;
             },
@@ -271,7 +271,7 @@ var CDNService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.createLock = function(lock) {
-        return $http.post(ENV.api['root'] + 'cdn_locks', lock).then(
+        return $http.post(ENV.api.unstable + 'cdn_locks', lock).then(
             function(result) {
                 return result;
             },
@@ -283,7 +283,7 @@ var CDNService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.deleteLock = function(queryParams) {
-        return $http.delete(ENV.api['root'] + 'cdn_locks', { params: queryParams }).then(
+        return $http.delete(ENV.api.unstable + 'cdn_locks', { params: queryParams }).then(
             function(result) {
                 return result;
             },
diff --git a/traffic_portal/app/src/common/api/CacheGroupService.js b/traffic_portal/app/src/common/api/CacheGroupService.js
index 2459726..79f6a73 100644
--- a/traffic_portal/app/src/common/api/CacheGroupService.js
+++ b/traffic_portal/app/src/common/api/CacheGroupService.js
@@ -20,7 +20,7 @@
 var CacheGroupService = function($http, locationUtils, messageModel, ENV) {
 
     this.getCacheGroups = function(queryParams) {
-        return $http.get(ENV.api['root'] + 'cachegroups', {params: queryParams}).then(
+        return $http.get(ENV.api.unstable + 'cachegroups', {params: queryParams}).then(
             function(result) {
                 return result.data.response;
             },
@@ -31,7 +31,7 @@ var CacheGroupService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.getCacheGroup = function(id) {
-        return $http.get(ENV.api['root'] + 'cachegroups', {params: {'id': id}}).then(
+        return $http.get(ENV.api.unstable + 'cachegroups', {params: {'id': id}}).then(
             function (result) {
                 return result.data.response[0];
             },
@@ -42,7 +42,7 @@ var CacheGroupService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.createCacheGroup = function(cacheGroup) {
-        return $http.post(ENV.api['root'] + 'cachegroups', cacheGroup).then(
+        return $http.post(ENV.api.unstable + 'cachegroups', cacheGroup).then(
             function (result) {
                 messageModel.setMessages(result.data.alerts, true);
                 locationUtils.navigateToPath('/cache-groups');
@@ -57,7 +57,7 @@ var CacheGroupService = function($http, locationUtils, messageModel, ENV) {
 
     // todo: change to use query param when it is supported
     this.updateCacheGroup = function(cacheGroup) {
-        return $http.put(ENV.api['root'] + 'cachegroups/' + cacheGroup.id, cacheGroup).then(
+        return $http.put(ENV.api.unstable + 'cachegroups/' + cacheGroup.id, cacheGroup).then(
             function(result) {
                 messageModel.setMessages(result.data.alerts, false);
                 return result;
@@ -71,7 +71,7 @@ var CacheGroupService = function($http, locationUtils, messageModel, ENV) {
 
     // todo: change to use query param when it is supported
     this.deleteCacheGroup = function(id) {
-        return $http.delete(ENV.api['root'] + "cachegroups/" + id).then(
+        return $http.delete(ENV.api.unstable + "cachegroups/" + id).then(
             function(result) {
                 return result.data;
             },
@@ -83,7 +83,7 @@ var CacheGroupService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.queueServerUpdates = function(cgId, cdnId) {
-        return $http.post(ENV.api['root'] + 'cachegroups/' + cgId + '/queue_update', {action: "queue", cdnId: cdnId}).then(
+        return $http.post(ENV.api.unstable + 'cachegroups/' + cgId + '/queue_update', {action: "queue", cdnId: cdnId}).then(
             function(result) {
                 messageModel.setMessages([{level: 'success', text: 'Queued Cache Group server updates'}], false);
                 return result;
@@ -96,7 +96,7 @@ var CacheGroupService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.clearServerUpdates = function(cgId, cdnId) {
-        return $http.post(ENV.api['root'] + 'cachegroups/' + cgId + '/queue_update', {action: "dequeue", cdnId: cdnId}).then(
+        return $http.post(ENV.api.unstable + 'cachegroups/' + cgId + '/queue_update', {action: "dequeue", cdnId: cdnId}).then(
             function(result) {
                 messageModel.setMessages([{level: 'success', text: 'Cleared Cache Group server updates'}], false);
                 return result;
@@ -109,7 +109,7 @@ var CacheGroupService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.getCacheGroupHealth = function() {
-        return $http.get(ENV.api['root'] + "cdns/health").then(
+        return $http.get(ENV.api.unstable + "cdns/health").then(
             function(result) {
                 return result.data.response;
             },
diff --git a/traffic_portal/app/src/common/api/CacheStatsService.js b/traffic_portal/app/src/common/api/CacheStatsService.js
index 1e5da46..abb6481 100644
--- a/traffic_portal/app/src/common/api/CacheStatsService.js
+++ b/traffic_portal/app/src/common/api/CacheStatsService.js
@@ -20,7 +20,7 @@
 var CacheStatsService = function($http, ENV, messageModel) {
 
 	this.getBandwidth = function(cdnName, start, end) {
-		const url = ENV.api['root'] + "cache_stats";
+		const url = ENV.api.unstable + "cache_stats";
 		const params = {
 			cdnName: cdnName,
 			metricType: 'bandwidth',
@@ -40,7 +40,7 @@ var CacheStatsService = function($http, ENV, messageModel) {
 	};
 
 	this.getConnections = function(cdnName, start, end) {
-		const url = ENV.api['root'] + "cache_stats";
+		const url = ENV.api.unstable + "cache_stats";
 		const params = {
 			cdnName: cdnName,
 			metricType: 'connections',
diff --git a/traffic_portal/app/src/common/api/CapabilityService.js b/traffic_portal/app/src/common/api/CapabilityService.js
index 6992641..28baa79 100644
--- a/traffic_portal/app/src/common/api/CapabilityService.js
+++ b/traffic_portal/app/src/common/api/CapabilityService.js
@@ -20,7 +20,7 @@
 var CapabilityService = function($http, messageModel, ENV) {
 
 	this.getCapabilities = function(queryParams) {
-		return $http.get(ENV.api['root'] + 'capabilities', {params: queryParams}).then(
+		return $http.get(ENV.api.unstable + 'capabilities', {params: queryParams}).then(
 			function(result) {
 				return result.data.response;
 			},
diff --git a/traffic_portal/app/src/common/api/ChangeLogService.js b/traffic_portal/app/src/common/api/ChangeLogService.js
index b51a513..979f3d4 100644
--- a/traffic_portal/app/src/common/api/ChangeLogService.js
+++ b/traffic_portal/app/src/common/api/ChangeLogService.js
@@ -20,7 +20,7 @@
 var ChangeLogService = function($http, $rootScope, ENV) {
 
 	this.getNewLogCount = function() {
-		return $http.get(ENV.api['root'] + 'logs/newcount', { ignoreLoadingBar: true }).then(
+		return $http.get(ENV.api.unstable + 'logs/newcount', { ignoreLoadingBar: true }).then(
 			function(result) {
 				return result.data.response;
 			},
@@ -32,7 +32,7 @@ var ChangeLogService = function($http, $rootScope, ENV) {
 
 	this.getChangeLogs = function(queryParams) {
 		$rootScope.$broadcast('changeLogService::getChangeLogs');
-		return $http.get(ENV.api['root'] + 'logs', {params: queryParams}).then(
+		return $http.get(ENV.api.unstable + 'logs', {params: queryParams}).then(
 			function(result) {
 				return result.data.response;
 			},
diff --git a/traffic_portal/app/src/common/api/CoordinateService.js b/traffic_portal/app/src/common/api/CoordinateService.js
index fff1678..40613e6 100644
--- a/traffic_portal/app/src/common/api/CoordinateService.js
+++ b/traffic_portal/app/src/common/api/CoordinateService.js
@@ -20,7 +20,7 @@
 var CoordinateService = function($http, locationUtils, messageModel, ENV) {
 
     this.getCoordinates = function(queryParams) {
-        return $http.get(ENV.api['root'] + 'coordinates', {params: queryParams}).then(
+        return $http.get(ENV.api.unstable + 'coordinates', {params: queryParams}).then(
             function(result) {
                 return result.data.response;
             },
@@ -31,7 +31,7 @@ var CoordinateService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.createCoordinate = function(coordinate) {
-        return $http.post(ENV.api['root'] + "coordinates", coordinate).then(
+        return $http.post(ENV.api.unstable + "coordinates", coordinate).then(
             function(response) {
                 messageModel.setMessages(response.data.alerts, true);
                 locationUtils.navigateToPath('/coordinates');
@@ -45,7 +45,7 @@ var CoordinateService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.updateCoordinate = function(id, coordinate) {
-        return $http.put(ENV.api['root'] + "coordinates", coordinate, {params: {id: id}}).then(
+        return $http.put(ENV.api.unstable + "coordinates", coordinate, {params: {id: id}}).then(
             function(response) {
                 messageModel.setMessages(response.data.alerts, false);
                 return response;
@@ -58,7 +58,7 @@ var CoordinateService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.deleteCoordinate = function(id) {
-        return $http.delete(ENV.api['root'] + "coordinates", {params: {id: id}}).then(
+        return $http.delete(ENV.api.unstable + "coordinates", {params: {id: id}}).then(
             function(response) {
                 messageModel.setMessages(response.data.alerts, true);
                 return response;
diff --git a/traffic_portal/app/src/common/api/DeliveryServiceRegexService.js b/traffic_portal/app/src/common/api/DeliveryServiceRegexService.js
index 18eb287..a4a2572 100644
--- a/traffic_portal/app/src/common/api/DeliveryServiceRegexService.js
+++ b/traffic_portal/app/src/common/api/DeliveryServiceRegexService.js
@@ -20,7 +20,7 @@
 var DeliveryServiceRegexService = function($http, locationUtils, messageModel, ENV) {
 
 	this.getDeliveryServiceRegexes = function(dsId) {
-		return $http.get(ENV.api['root'] + 'deliveryservices/' + dsId + '/regexes').then(
+		return $http.get(ENV.api.unstable + 'deliveryservices/' + dsId + '/regexes').then(
 			function(result) {
 				return result.data.response;
 			},
@@ -31,7 +31,7 @@ var DeliveryServiceRegexService = function($http, locationUtils, messageModel, E
 	};
 
 	this.getDeliveryServiceRegex = function(dsId, regexId) {
-		return $http.get(ENV.api['root'] + 'deliveryservices/' + dsId + '/regexes', {params: {id: regexId}}).then(
+		return $http.get(ENV.api.unstable + 'deliveryservices/' + dsId + '/regexes', {params: {id: regexId}}).then(
 			function(result) {
 				return result.data.response[0];
 			},
@@ -42,7 +42,7 @@ var DeliveryServiceRegexService = function($http, locationUtils, messageModel, E
 	};
 
 	this.createDeliveryServiceRegex = function(dsId, regex) {
-		return $http.post(ENV.api['root'] + 'deliveryservices/' + dsId + '/regexes', regex).then(
+		return $http.post(ENV.api.unstable + 'deliveryservices/' + dsId + '/regexes', regex).then(
 			function(result) {
 				messageModel.setMessages(result.data.alerts, true);
 				locationUtils.navigateToPath('/delivery-services/' + dsId + '/regexes');
@@ -56,7 +56,7 @@ var DeliveryServiceRegexService = function($http, locationUtils, messageModel, E
 	};
 
 	this.updateDeliveryServiceRegex = function(dsId, regex) {
-		return $http.put(ENV.api['root'] + 'deliveryservices/' + dsId + '/regexes/' + regex.id, regex).then(
+		return $http.put(ENV.api.unstable + 'deliveryservices/' + dsId + '/regexes/' + regex.id, regex).then(
 			function(result) {
 				messageModel.setMessages([{level: 'success', text:'Regex updated'}], false);
 				return result;
@@ -69,7 +69,7 @@ var DeliveryServiceRegexService = function($http, locationUtils, messageModel, E
 	};
 
 	this.deleteDeliveryServiceRegex = function(dsId, regexId) {
-		return $http.delete(ENV.api['root'] + 'deliveryservices/' + dsId + '/regexes/' + regexId).then(
+		return $http.delete(ENV.api.unstable + 'deliveryservices/' + dsId + '/regexes/' + regexId).then(
 			function(result) {
 				messageModel.setMessages(result.data.alerts, true);
 				return result;
diff --git a/traffic_portal/app/src/common/api/DeliveryServiceRequestService.js b/traffic_portal/app/src/common/api/DeliveryServiceRequestService.js
index b1eda6a..1a681be 100644
--- a/traffic_portal/app/src/common/api/DeliveryServiceRequestService.js
+++ b/traffic_portal/app/src/common/api/DeliveryServiceRequestService.js
@@ -20,7 +20,7 @@
 var DeliveryServiceRequestService = function($http, locationUtils, messageModel, ENV) {
 
 	this.getDeliveryServiceRequests = function(queryParams) {
-		return $http.get(ENV.api.root + 'deliveryservice_requests', {params: queryParams}).then(
+		return $http.get(ENV.api.unstable + 'deliveryservice_requests', {params: queryParams}).then(
 			function(result) {
 				return result.data.response;
 			},
@@ -37,7 +37,7 @@ var DeliveryServiceRequestService = function($http, locationUtils, messageModel,
 			dsRequest.requested.consistentHashQueryParams = Array.from(new Set(dsRequest.requested.consistentHashQueryParams)).filter(function(i){return i;});
 		}
 
-		return $http.post(ENV.api.root + "deliveryservice_requests", dsRequest).then(
+		return $http.post(ENV.api.unstable + "deliveryservice_requests", dsRequest).then(
 			function(result) {
 				return result.data.response;
 			},
@@ -55,7 +55,7 @@ var DeliveryServiceRequestService = function($http, locationUtils, messageModel,
 			dsRequest.requested.consistentHashQueryParams = Array.from(new Set(dsRequest.requested.consistentHashQueryParams)).filter(function(i){return i;});
 		}
 
-		return $http.put(ENV.api.root + "deliveryservice_requests", dsRequest, {params: {id: id}}).then(
+		return $http.put(ENV.api.unstable + "deliveryservice_requests", dsRequest, {params: {id: id}}).then(
 			function(result) {
 				return result;
 			},
@@ -67,7 +67,7 @@ var DeliveryServiceRequestService = function($http, locationUtils, messageModel,
 	};
 
 	this.deleteDeliveryServiceRequest = function(id, delay) {
-		return $http.delete(ENV.api.root + "deliveryservice_requests", {params: {id: id}}).then(
+		return $http.delete(ENV.api.unstable + "deliveryservice_requests", {params: {id: id}}).then(
 			function(response) {
 				return response;
 			},
@@ -79,7 +79,7 @@ var DeliveryServiceRequestService = function($http, locationUtils, messageModel,
 	};
 
 	this.assignDeliveryServiceRequest = function(id, username) {
-		return $http.put(ENV.api.root + "deliveryservice_requests/" + id + "/assign", { assignee: username }).then(
+		return $http.put(ENV.api.unstable + "deliveryservice_requests/" + id + "/assign", { assignee: username }).then(
 			function(result) {
 				return result;
 			},
@@ -91,7 +91,7 @@ var DeliveryServiceRequestService = function($http, locationUtils, messageModel,
 	};
 
 	this.updateDeliveryServiceRequestStatus = function(id, status) {
-		return $http.put(ENV.api.root + "deliveryservice_requests/" + id + "/status", { status: status }).then(
+		return $http.put(ENV.api.unstable + "deliveryservice_requests/" + id + "/status", { status: status }).then(
 			function(result) {
 				return result;
 			},
@@ -103,7 +103,7 @@ var DeliveryServiceRequestService = function($http, locationUtils, messageModel,
 	};
 
 	this.getDeliveryServiceRequestComments = function(queryParams) {
-		return $http.get(ENV.api.root + 'deliveryservice_request_comments', {params: queryParams}).then(
+		return $http.get(ENV.api.unstable + 'deliveryservice_request_comments', {params: queryParams}).then(
 			function(result) {
 				return result.data.response;
 			},
@@ -114,7 +114,7 @@ var DeliveryServiceRequestService = function($http, locationUtils, messageModel,
 	};
 
 	this.createDeliveryServiceRequestComment = function(comment) {
-		return $http.post(ENV.api.root + "deliveryservice_request_comments", comment).then(
+		return $http.post(ENV.api.unstable + "deliveryservice_request_comments", comment).then(
 			function(response) {
 				return response;
 			},
@@ -125,7 +125,7 @@ var DeliveryServiceRequestService = function($http, locationUtils, messageModel,
 	};
 
 	this.updateDeliveryServiceRequestComment = function(comment) {
-		return $http.put(ENV.api.root + "deliveryservice_request_comments", comment, {params: {id: comment.id}}).then(
+		return $http.put(ENV.api.unstable + "deliveryservice_request_comments", comment, {params: {id: comment.id}}).then(
 				function(result) {
 					return result;
 				},
@@ -137,7 +137,7 @@ var DeliveryServiceRequestService = function($http, locationUtils, messageModel,
 	};
 
 	this.deleteDeliveryServiceRequestComment = function(comment) {
-		return $http.delete(ENV.api.root + "deliveryservice_request_comments", {params: {id: comment.id}}).then(
+		return $http.delete(ENV.api.unstable + "deliveryservice_request_comments", {params: {id: comment.id}}).then(
 			function(response) {
 				return response;
 			},
diff --git a/traffic_portal/app/src/common/api/DeliveryServiceService.js b/traffic_portal/app/src/common/api/DeliveryServiceService.js
index b162941..12de10e 100644
--- a/traffic_portal/app/src/common/api/DeliveryServiceService.js
+++ b/traffic_portal/app/src/common/api/DeliveryServiceService.js
@@ -20,7 +20,7 @@
 var DeliveryServiceService = function($http, locationUtils, messageModel, ENV) {
 
     this.getDeliveryServices = function(queryParams) {
-        return $http.get(ENV.api['root'] + 'deliveryservices', {params: queryParams}).then(
+        return $http.get(ENV.api.unstable + 'deliveryservices', {params: queryParams}).then(
             function(result) {
                 return result.data.response;
             },
@@ -31,7 +31,7 @@ var DeliveryServiceService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.getDeliveryService = function(id) {
-        return $http.get(ENV.api['root'] + 'deliveryservices', {params: {id: id}}).then(
+        return $http.get(ENV.api.unstable + 'deliveryservices', {params: {id: id}}).then(
             function(result) {
                 return result.data.response[0];
             },
@@ -45,7 +45,7 @@ var DeliveryServiceService = function($http, locationUtils, messageModel, ENV) {
         // strip out any falsy values or duplicates from consistentHashQueryParams
         ds.consistentHashQueryParams = Array.from(new Set(ds.consistentHashQueryParams)).filter(function(i){return i;});
 
-        return $http.post(ENV.api['root'] + "deliveryservices", ds).then(
+        return $http.post(ENV.api.unstable + "deliveryservices", ds).then(
             function(response) {
                 return response;
             },
@@ -59,7 +59,7 @@ var DeliveryServiceService = function($http, locationUtils, messageModel, ENV) {
         // strip out any falsy values or duplicates from consistentHashQueryParams
         ds.consistentHashQueryParams = Array.from(new Set(ds.consistentHashQueryParams)).filter(function(i){return i;});
 
-        return $http.put(ENV.api['root'] + "deliveryservices/" + ds.id, ds).then(
+        return $http.put(ENV.api.unstable + "deliveryservices/" + ds.id, ds).then(
             function(response) {
                 return response;
             },
@@ -71,7 +71,7 @@ var DeliveryServiceService = function($http, locationUtils, messageModel, ENV) {
 
     // todo: change to use query param when it is supported
     this.deleteDeliveryService = function(ds) {
-        return $http.delete(ENV.api['root'] + "deliveryservices/" + ds.id).then(
+        return $http.delete(ENV.api.unstable + "deliveryservices/" + ds.id).then(
             function(response) {
                 return response;
             },
@@ -82,7 +82,7 @@ var DeliveryServiceService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.getServerCapabilities = function(id) {
-        return $http.get(ENV.api['root'] + 'deliveryservices_required_capabilities', { params: { deliveryServiceID: id } }).then(
+        return $http.get(ENV.api.unstable + 'deliveryservices_required_capabilities', { params: { deliveryServiceID: id } }).then(
             function (result) {
                 return result.data.response;
             },
@@ -93,7 +93,7 @@ var DeliveryServiceService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.addServerCapability = function(deliveryServiceId, capabilityName) {
-        return $http.post(ENV.api['root'] + 'deliveryservices_required_capabilities', { deliveryServiceID: deliveryServiceId, requiredCapability: capabilityName}).then(
+        return $http.post(ENV.api.unstable + 'deliveryservices_required_capabilities', { deliveryServiceID: deliveryServiceId, requiredCapability: capabilityName}).then(
             function(result) {
                 return result.data;
             },
@@ -107,7 +107,7 @@ var DeliveryServiceService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.removeServerCapability = function(deliveryServiceId, capabilityName) {
-        return $http.delete(ENV.api['root'] + 'deliveryservices_required_capabilities', { params: { deliveryServiceID: deliveryServiceId, requiredCapability: capabilityName} }).then(
+        return $http.delete(ENV.api.unstable + 'deliveryservices_required_capabilities', { params: { deliveryServiceID: deliveryServiceId, requiredCapability: capabilityName} }).then(
             function(result) {
                 return result.data;
             },
@@ -121,7 +121,7 @@ var DeliveryServiceService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.getServerDeliveryServices = function(serverId) {
-        return $http.get(ENV.api['root'] + 'servers/' + serverId + '/deliveryservices').then(
+        return $http.get(ENV.api.unstable + 'servers/' + serverId + '/deliveryservices').then(
             function(result) {
                 return result.data.response;
             },
@@ -132,7 +132,7 @@ var DeliveryServiceService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.getDeliveryServiceTargets = function(dsId) {
-        return $http.get(ENV.api['root'] + 'steering/' + dsId + '/targets').then(
+        return $http.get(ENV.api.unstable + 'steering/' + dsId + '/targets').then(
             function(result) {
                 return result.data.response;
             },
@@ -143,7 +143,7 @@ var DeliveryServiceService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.getDeliveryServiceTarget = function(dsId, targetId) {
-        return $http.get(ENV.api['root'] + 'steering/' + dsId + '/targets', {params: {target: targetId}}).then(
+        return $http.get(ENV.api.unstable + 'steering/' + dsId + '/targets', {params: {target: targetId}}).then(
             function(result) {
                 return result.data.response[0];
             },
@@ -154,7 +154,7 @@ var DeliveryServiceService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.updateDeliveryServiceTarget = function(dsId, targetId, target) {
-        return $http.put(ENV.api['root'] + "steering/" + dsId + "/targets/" + targetId, target).then(
+        return $http.put(ENV.api.unstable + "steering/" + dsId + "/targets/" + targetId, target).then(
             function(result) {
                 messageModel.setMessages(result.data.alerts, true);
                 locationUtils.navigateToPath('/delivery-services/' + dsId + '/targets');
@@ -168,7 +168,7 @@ var DeliveryServiceService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.createDeliveryServiceTarget = function(dsId, target) {
-        return $http.post(ENV.api['root'] + 'steering/' + dsId + '/targets', target).then(
+        return $http.post(ENV.api.unstable + 'steering/' + dsId + '/targets', target).then(
             function(result) {
                 messageModel.setMessages(result.data.alerts, true);
                 locationUtils.navigateToPath('/delivery-services/' + dsId + '/targets');
@@ -182,7 +182,7 @@ var DeliveryServiceService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.deleteDeliveryServiceTarget = function(dsId, targetId) {
-        return $http.delete(ENV.api['root'] + 'steering/' + dsId + '/targets/' + targetId).then(
+        return $http.delete(ENV.api.unstable + 'steering/' + dsId + '/targets/' + targetId).then(
             function(result) {
                 messageModel.setMessages(result.data.alerts, true);
                 locationUtils.navigateToPath('/delivery-services/' + dsId + '/targets');
@@ -196,7 +196,7 @@ var DeliveryServiceService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.getUserDeliveryServices = function(userId) {
-        return $http.get(ENV.api['root'] + 'users/' + userId + '/deliveryservices').then(
+        return $http.get(ENV.api.unstable + 'users/' + userId + '/deliveryservices').then(
             function(result) {
                 return result.data.response;
             },
@@ -207,7 +207,7 @@ var DeliveryServiceService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.deleteDeliveryServiceServer = function(dsId, serverId) {
-        return $http.delete(ENV.api['root'] + 'deliveryserviceserver/' + dsId + '/' + serverId).then(
+        return $http.delete(ENV.api.unstable + 'deliveryserviceserver/' + dsId + '/' + serverId).then(
             function(result) {
                 messageModel.setMessages(result.data.alerts, false);
                 return result;
@@ -220,7 +220,7 @@ var DeliveryServiceService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.assignDeliveryServiceServers = function(dsId, servers) {
-        return $http.post(ENV.api['root'] + 'deliveryserviceserver',{ dsId: dsId, servers: servers, replace: true } ).then(
+        return $http.post(ENV.api.unstable + 'deliveryserviceserver',{ dsId: dsId, servers: servers, replace: true } ).then(
             function(result) {
                 messageModel.setMessages(result.data.alerts, false);
                 return result;
@@ -233,7 +233,7 @@ var DeliveryServiceService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.getConsistentHashResult = function (regex, requestPath, cdnId) {
-        const url = ENV.api['root'] + "consistenthash";
+        const url = ENV.api.unstable + "consistenthash";
         const params = {regex: regex, requestPath: requestPath, cdnId: cdnId};
 
         return $http.post(url, params).then(
diff --git a/traffic_portal/app/src/common/api/DeliveryServiceSslKeysService.js b/traffic_portal/app/src/common/api/DeliveryServiceSslKeysService.js
index 2870f5d..891c937 100644
--- a/traffic_portal/app/src/common/api/DeliveryServiceSslKeysService.js
+++ b/traffic_portal/app/src/common/api/DeliveryServiceSslKeysService.js
@@ -41,7 +41,7 @@ var DeliveryServiceSslKeysService = function($http, locationUtils, messageModel,
         generateSslKeyForm.key = deliveryService.xmlId;
         generateSslKeyForm.authType = sslKeys.authType;
 
-        return $http.post(ENV.api['root'] + endpoint, generateSslKeyForm).then(
+        return $http.post(ENV.api.unstable + endpoint, generateSslKeyForm).then(
             function(result) {
                 if (message === null) {
                     messageModel.setMessages(result.data.alerts, true);
@@ -60,7 +60,7 @@ var DeliveryServiceSslKeysService = function($http, locationUtils, messageModel,
     };
 
     this.renewCert = function(deliveryService) {
-        return $http.post(ENV.api['root'] + "deliveryservices/xmlId/" + deliveryService.xmlId + "/sslkeys/renew").then(
+        return $http.post(ENV.api.unstable + "deliveryservices/xmlId/" + deliveryService.xmlId + "/sslkeys/renew").then(
             function(result) {
                 messageModel.setMessages(result.data.alerts, false);
                 return result.data.response;
@@ -86,7 +86,7 @@ var DeliveryServiceSslKeysService = function($http, locationUtils, messageModel,
         sslKeys.cdn = deliveryService.cdnName;
         sslKeys.deliveryservice = deliveryService.xmlId;
 
-        return $http.post(ENV.api['root'] + "deliveryservices/sslkeys/add", sslKeys).then(
+        return $http.post(ENV.api.unstable + "deliveryservices/sslkeys/add", sslKeys).then(
             function(result) {
                 messageModel.setMessages(result.data.alerts, false);
                 return result.data.response;
@@ -101,7 +101,7 @@ var DeliveryServiceSslKeysService = function($http, locationUtils, messageModel,
     };
 
     this.getSslKeys = function(deliveryService) {
-        return $http.get(ENV.api['root'] + "deliveryservices/xmlId/" + deliveryService.xmlId + "/sslkeys", {params: {decode: "true"}}).then(
+        return $http.get(ENV.api.unstable + "deliveryservices/xmlId/" + deliveryService.xmlId + "/sslkeys", {params: {decode: "true"}}).then(
             function(result) {
                 return result.data.response;
             },
@@ -115,7 +115,7 @@ var DeliveryServiceSslKeysService = function($http, locationUtils, messageModel,
     };
 
     this.getAcmeProviders = function() {
-        return $http.get(ENV.api['root'] + 'acme_accounts/providers').then(
+        return $http.get(ENV.api.unstable + 'acme_accounts/providers').then(
             function (result) {
                 return result.data.response;
             },
diff --git a/traffic_portal/app/src/common/api/DeliveryServiceStatsService.js b/traffic_portal/app/src/common/api/DeliveryServiceStatsService.js
index 0ffb53c..6736cee 100644
--- a/traffic_portal/app/src/common/api/DeliveryServiceStatsService.js
+++ b/traffic_portal/app/src/common/api/DeliveryServiceStatsService.js
@@ -20,7 +20,7 @@
 var DeliveryServiceStatsService = function($http, ENV, messageModel) {
 
 	this.getBPS = function(xmlId, start, end) {
-		const url = ENV.api['root'] + "deliveryservice_stats";
+		const url = ENV.api.unstable + "deliveryservice_stats";
 		const params = {
 			deliveryServiceName: xmlId,
 			metricType: 'kbps',
@@ -42,7 +42,7 @@ var DeliveryServiceStatsService = function($http, ENV, messageModel) {
 	};
 
 	this.getTPS = function(xmlId, start, end) {
-		const url = ENV.api['root'] + "deliveryservice_stats";
+		const url = ENV.api.unstable + "deliveryservice_stats";
 		const params = {
 			deliveryServiceName: xmlId,
 			metricType: 'tps_total',
@@ -64,7 +64,7 @@ var DeliveryServiceStatsService = function($http, ENV, messageModel) {
 	};
 
 	this.getHttpStatusByGroup = function(xmlId, httpStatus, start, end) {
-		const url = ENV.api['root'] + "deliveryservice_stats";
+		const url = ENV.api.unstable + "deliveryservice_stats";
 		const params = {
 			deliveryServiceName: xmlId,
 			metricType: 'tps_' + httpStatus,
diff --git a/traffic_portal/app/src/common/api/DeliveryServiceUriSigningKeysService.js b/traffic_portal/app/src/common/api/DeliveryServiceUriSigningKeysService.js
index 5f0ff2a..6ec8be5 100644
--- a/traffic_portal/app/src/common/api/DeliveryServiceUriSigningKeysService.js
+++ b/traffic_portal/app/src/common/api/DeliveryServiceUriSigningKeysService.js
@@ -20,7 +20,7 @@
 var DeliveryServiceUriSigningKeysService = function($http, ENV) {
 
 	this.getKeys = function(xmlID) {
-		return $http.get(ENV.api['root'] + 'deliveryservices/' + xmlID + '/urisignkeys').then(
+		return $http.get(ENV.api.unstable + 'deliveryservices/' + xmlID + '/urisignkeys').then(
 			function(result) {
 				return result.data;
 			},
@@ -31,7 +31,7 @@ var DeliveryServiceUriSigningKeysService = function($http, ENV) {
 	};
 
 	this.setKeys = function(xmlID, newKeys) {
-		return $http.post(ENV.api['root'] + 'deliveryservices/' + xmlID + '/urisignkeys', newKeys).then(
+		return $http.post(ENV.api.unstable + 'deliveryservices/' + xmlID + '/urisignkeys', newKeys).then(
 			function(result) {
 				return result.data;
 			},
diff --git a/traffic_portal/app/src/common/api/DeliveryServiceUrlSigKeysService.js b/traffic_portal/app/src/common/api/DeliveryServiceUrlSigKeysService.js
index d700ec0..bb1cc7f 100644
--- a/traffic_portal/app/src/common/api/DeliveryServiceUrlSigKeysService.js
+++ b/traffic_portal/app/src/common/api/DeliveryServiceUrlSigKeysService.js
@@ -20,7 +20,7 @@
 var DeliveryServiceUrlSigKeysService = function(locationUtils, messageModel, $http, ENV) {
 
 	this.generateUrlSigKeys = function(dsXmlId) {
-		return $http.post(ENV.api['root'] + 'deliveryservices/xmlId/' + dsXmlId + '/urlkeys/generate').then(
+		return $http.post(ENV.api.unstable + 'deliveryservices/xmlId/' + dsXmlId + '/urlkeys/generate').then(
 			function(result) {
 				messageModel.setMessages(result.data.alerts, false);
 				return result;
@@ -33,7 +33,7 @@ var DeliveryServiceUrlSigKeysService = function(locationUtils, messageModel, $ht
 	};
 
 	this.copyUrlSigKeys = function(dsXmlId, copyFromXmlId) {
-		return $http.post(ENV.api['root'] + 'deliveryservices/xmlId/' + dsXmlId + '/urlkeys/copyFromXmlId/' + copyFromXmlId).then(
+		return $http.post(ENV.api.unstable + 'deliveryservices/xmlId/' + dsXmlId + '/urlkeys/copyFromXmlId/' + copyFromXmlId).then(
 			function(result) {
 				messageModel.setMessages(result.data.alerts, false);
 				return result;
@@ -46,7 +46,7 @@ var DeliveryServiceUrlSigKeysService = function(locationUtils, messageModel, $ht
 	};
 
 	this.getDeliveryServiceUrlSigKeys = function(dsId) {
-        return $http.get(ENV.api['root'] + "deliveryservices/" + dsId + "/urlkeys").then(
+        return $http.get(ENV.api.unstable + "deliveryservices/" + dsId + "/urlkeys").then(
             function(result) {
                 return result.data.response;
             },
diff --git a/traffic_portal/app/src/common/api/DivisionService.js b/traffic_portal/app/src/common/api/DivisionService.js
index 884ce0d..36fa3c2 100644
--- a/traffic_portal/app/src/common/api/DivisionService.js
+++ b/traffic_portal/app/src/common/api/DivisionService.js
@@ -20,7 +20,7 @@
 var DivisionService = function($http, ENV, locationUtils, messageModel) {
 
     this.getDivisions = function(queryParams) {
-        return $http.get(ENV.api['root'] + 'divisions', {params: queryParams}).then(
+        return $http.get(ENV.api.unstable + 'divisions', {params: queryParams}).then(
             function(result) {
                 return result.data.response;
             },
@@ -31,7 +31,7 @@ var DivisionService = function($http, ENV, locationUtils, messageModel) {
     };
 
     this.getDivision = function(id) {
-        return $http.get(ENV.api['root'] + 'divisions', {params: {id: id}}).then(
+        return $http.get(ENV.api.unstable + 'divisions', {params: {id: id}}).then(
             function(result) {
                 return result.data.response[0];
             },
@@ -42,7 +42,7 @@ var DivisionService = function($http, ENV, locationUtils, messageModel) {
     };
 
     this.createDivision = function(division) {
-        return $http.post(ENV.api['root'] + 'divisions', division).then(
+        return $http.post(ENV.api.unstable + 'divisions', division).then(
             function(result) {
                 messageModel.setMessages(result.data.alerts, true);
                 locationUtils.navigateToPath('/divisions');
@@ -57,7 +57,7 @@ var DivisionService = function($http, ENV, locationUtils, messageModel) {
 
     // todo: change to use query param when it is supported
     this.updateDivision = function(division) {
-        return $http.put(ENV.api['root'] + 'divisions/' + division.id, division).then(
+        return $http.put(ENV.api.unstable + 'divisions/' + division.id, division).then(
             function(result) {
                 messageModel.setMessages(result.data.alerts, false);
                 return result;            },
@@ -70,7 +70,7 @@ var DivisionService = function($http, ENV, locationUtils, messageModel) {
 
     // todo: change to use query param when it is supported
     this.deleteDivision = function(id) {
-        return $http.delete(ENV.api['root'] + 'divisions/' + id).then(
+        return $http.delete(ENV.api.unstable + 'divisions/' + id).then(
                 function(result) {
                     messageModel.setMessages(result.data.alerts, true);
                     return result;
diff --git a/traffic_portal/app/src/common/api/EndpointService.js b/traffic_portal/app/src/common/api/EndpointService.js
index 27e3827..a47242c 100644
--- a/traffic_portal/app/src/common/api/EndpointService.js
+++ b/traffic_portal/app/src/common/api/EndpointService.js
@@ -20,7 +20,7 @@
 var EndpointService = function($http, ENV) {
 
 	this.getEndpoints = function(queryParams) {
-		return $http.get(ENV.api['root'] + 'api_capabilities', {params: queryParams}).then(
+		return $http.get(ENV.api.unstable + 'api_capabilities', {params: queryParams}).then(
 			function (result) {
 				return result.data.response;
 			},
diff --git a/traffic_portal/app/src/common/api/FederationResolverService.js b/traffic_portal/app/src/common/api/FederationResolverService.js
index 2246d9f..7ac45ed 100644
--- a/traffic_portal/app/src/common/api/FederationResolverService.js
+++ b/traffic_portal/app/src/common/api/FederationResolverService.js
@@ -20,7 +20,7 @@
 var FederationResolverService = function($http, ENV, locationUtils, messageModel) {
 
 	this.getFederationResolvers = function(queryParams) {
-		return $http.get(ENV.api['root'] + 'federation_resolvers', {params: queryParams}).then(
+		return $http.get(ENV.api.unstable + 'federation_resolvers', {params: queryParams}).then(
 			function (result) {
 				return result.data.response;
 			},
@@ -31,7 +31,7 @@ var FederationResolverService = function($http, ENV, locationUtils, messageModel
 	};
 
 	this.createFederationResolver = function(fedResolver) {
-		return $http.post(ENV.api['root'] + 'federation_resolvers', fedResolver).then(
+		return $http.post(ENV.api.unstable + 'federation_resolvers', fedResolver).then(
 			function(result) {
 				return result;
 			},
@@ -42,7 +42,7 @@ var FederationResolverService = function($http, ENV, locationUtils, messageModel
 	};
 
 	this.assignFederationResolvers = function(fedId, fedResIds, replace) {
-		return $http.post(ENV.api['root'] + 'federations/' + fedId + '/federation_resolvers', { fedResolverIds: fedResIds, replace: replace }).then(
+		return $http.post(ENV.api.unstable + 'federations/' + fedId + '/federation_resolvers', { fedResolverIds: fedResIds, replace: replace }).then(
 			function(result) {
 				messageModel.setMessages([ { level: 'success', text: fedResIds.length + ' resolver(s) assigned to federation' } ], false);
 				return result;
diff --git a/traffic_portal/app/src/common/api/FederationService.js b/traffic_portal/app/src/common/api/FederationService.js
index 10a8684..b16895d 100644
--- a/traffic_portal/app/src/common/api/FederationService.js
+++ b/traffic_portal/app/src/common/api/FederationService.js
@@ -22,7 +22,7 @@ var FederationService = function($http, $q, ENV, locationUtils, messageModel) {
 	const service = this;
 
 	this.getCDNFederations = function(cdnName) {
-		return $http.get(ENV.api['root'] + 'cdns/' + cdnName + '/federations').then(
+		return $http.get(ENV.api.unstable + 'cdns/' + cdnName + '/federations').then(
 			function (result) {
 				return result.data.response;
 			},
@@ -33,7 +33,7 @@ var FederationService = function($http, $q, ENV, locationUtils, messageModel) {
 	};
 
 	this.getCDNFederation = function(cdnName, fedId) {
-		return $http.get(ENV.api['root'] + 'cdns/' + cdnName + '/federations', {params: {id: fedId}}).then(
+		return $http.get(ENV.api.unstable + 'cdns/' + cdnName + '/federations', {params: {id: fedId}}).then(
 			function (result) {
 				return result.data.response[0];
 			},
@@ -44,7 +44,7 @@ var FederationService = function($http, $q, ENV, locationUtils, messageModel) {
 	};
 
 	this.createFederation = function(cdn, fed) {
-		return $http.post(ENV.api['root'] + 'cdns/' + cdn.name + '/federations', fed).then(
+		return $http.post(ENV.api.unstable + 'cdns/' + cdn.name + '/federations', fed).then(
 			function(result) {
 				const newFedId = result.data.response.id;
 				const alerts = result.data.alerts;
@@ -72,7 +72,7 @@ var FederationService = function($http, $q, ENV, locationUtils, messageModel) {
 	};
 
 	this.updateFederation = function(cdnName, fed) {
-		return $http.put(ENV.api['root'] + 'cdns/' + cdnName + '/federations/' + fed.id, fed).then(
+		return $http.put(ENV.api.unstable + 'cdns/' + cdnName + '/federations/' + fed.id, fed).then(
 			function() {
 				service.assignFederationDeliveryServices(fed.id, [ fed.dsId ], true).then(
 					function() {
@@ -91,7 +91,7 @@ var FederationService = function($http, $q, ENV, locationUtils, messageModel) {
 	};
 
 	this.deleteFederation = function(cdnName, fedId) {
-		return $http.delete(ENV.api['root'] + 'cdns/' + cdnName + '/federations/' + fedId).then(
+		return $http.delete(ENV.api.unstable + 'cdns/' + cdnName + '/federations/' + fedId).then(
 			function(result) {
 				messageModel.setMessages([{level: 'success', text: 'Federation deleted'}], true);
 				return result;
@@ -104,7 +104,7 @@ var FederationService = function($http, $q, ENV, locationUtils, messageModel) {
 	};
 
 	this.getFederationUsers = function(fedId) {
-		return $http.get(ENV.api['root'] + 'federations/' + fedId + '/users').then(
+		return $http.get(ENV.api.unstable + 'federations/' + fedId + '/users').then(
 			function (result) {
 				return result.data.response;
 			},
@@ -115,7 +115,7 @@ var FederationService = function($http, $q, ENV, locationUtils, messageModel) {
 	};
 
 	this.assignFederationUsers = function(fedId, userIds, replace) {
-		return $http.post(ENV.api['root'] + 'federations/' + fedId + '/users', { userIds: userIds, replace: replace }).then(
+		return $http.post(ENV.api.unstable + 'federations/' + fedId + '/users', { userIds: userIds, replace: replace }).then(
 			function(result) {
 				messageModel.setMessages([{level: 'success', text: 'Users linked to federation'}], false);
 				return result;
@@ -128,7 +128,7 @@ var FederationService = function($http, $q, ENV, locationUtils, messageModel) {
 	};
 
 	this.deleteFederationUser = function(fedId, userId) {
-		return $http.delete(ENV.api['root'] + 'federations/' + fedId + '/users/' + userId).then(
+		return $http.delete(ENV.api.unstable + 'federations/' + fedId + '/users/' + userId).then(
 				function(result) {
 					messageModel.setMessages([ { level: 'success', text: 'Federation and user were unlinked.' } ], false);
 					return result;
@@ -141,7 +141,7 @@ var FederationService = function($http, $q, ENV, locationUtils, messageModel) {
 	};
 
 	this.getFederationDeliveryServices = function(fedId) {
-		return $http.get(ENV.api['root'] + 'federations/' + fedId + '/deliveryservices').then(
+		return $http.get(ENV.api.unstable + 'federations/' + fedId + '/deliveryservices').then(
 			function (result) {
 				return result.data.response;
 			},
@@ -152,7 +152,7 @@ var FederationService = function($http, $q, ENV, locationUtils, messageModel) {
 	};
 
 	this.assignFederationDeliveryServices = function(fedId, dsIds, replace) {
-		return $http.post(ENV.api['root'] + 'federations/' + fedId + '/deliveryservices', { dsIds: dsIds, replace: replace }).then(
+		return $http.post(ENV.api.unstable + 'federations/' + fedId + '/deliveryservices', { dsIds: dsIds, replace: replace }).then(
 			function(result) {
 				messageModel.setMessages([{level: 'success', text: 'Delivery services linked to federation'}], false);
 				return result;
@@ -165,7 +165,7 @@ var FederationService = function($http, $q, ENV, locationUtils, messageModel) {
 	};
 
 	this.deleteFederationDeliveryService = function(fedId, dsId) {
-		return $http.delete(ENV.api['root'] + 'federations/' + fedId + '/deliveryservices/' + dsId).then(
+		return $http.delete(ENV.api.unstable + 'federations/' + fedId + '/deliveryservices/' + dsId).then(
 			function(result) {
 				messageModel.setMessages([{level: 'success', text: 'Federation and delivery service were unlinked.'}], false);
 				return result;
@@ -178,7 +178,7 @@ var FederationService = function($http, $q, ENV, locationUtils, messageModel) {
 	};
 
 	this.getFederationFederationResolvers = function(fedId) {
-		return $http.get(ENV.api['root'] + 'federations/' + fedId + '/federation_resolvers').then(
+		return $http.get(ENV.api.unstable + 'federations/' + fedId + '/federation_resolvers').then(
 			function (result) {
 				return result.data.response;
 			},
diff --git a/traffic_portal/app/src/common/api/JobService.js b/traffic_portal/app/src/common/api/JobService.js
index 42d9ece..39155f9 100644
--- a/traffic_portal/app/src/common/api/JobService.js
+++ b/traffic_portal/app/src/common/api/JobService.js
@@ -20,7 +20,7 @@
 var JobService = function($http, ENV) {
 
 	this.getJobs = function(queryParams) {
-		return $http.get(ENV.api['root'] + 'jobs', {params: queryParams}).then(
+		return $http.get(ENV.api.unstable + 'jobs', {params: queryParams}).then(
 			function(result) {
 				return result.data.response;
 			},
@@ -31,7 +31,7 @@ var JobService = function($http, ENV) {
 	};
 
 	this.createJob = function(job) {
-		return $http.post(ENV.api['root'] + 'jobs', job).then(
+		return $http.post(ENV.api.unstable + 'jobs', job).then(
 			function (result) {
 				return result;
 			},
@@ -42,7 +42,7 @@ var JobService = function($http, ENV) {
 	};
 
 	this.deleteJob = function(id) {
-		return $http.delete(ENV.api['root'] + 'jobs', {params: {id: id}}).then(
+		return $http.delete(ENV.api.unstable + 'jobs', {params: {id: id}}).then(
 			function(result) {
 				return result;
 			},
diff --git a/traffic_portal/app/src/common/api/OriginService.js b/traffic_portal/app/src/common/api/OriginService.js
index b309cb2..cf14992 100644
--- a/traffic_portal/app/src/common/api/OriginService.js
+++ b/traffic_portal/app/src/common/api/OriginService.js
@@ -20,7 +20,7 @@
 var OriginService = function($http, locationUtils, messageModel, ENV) {
 
     this.getOrigins = function(queryParams) {
-        return $http.get(ENV.api['root'] + 'origins', {params: queryParams}).then(
+        return $http.get(ENV.api.unstable + 'origins', {params: queryParams}).then(
             function (result) {
                 return result.data.response;
             },
@@ -31,7 +31,7 @@ var OriginService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.createOrigin = function(origin) {
-        return $http.post(ENV.api['root'] + 'origins', origin).then(
+        return $http.post(ENV.api.unstable + 'origins', origin).then(
             function(response) {
                 messageModel.setMessages(response.data.alerts, true);
                 locationUtils.navigateToPath('/origins');
@@ -45,7 +45,7 @@ var OriginService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.updateOrigin = function(id, origin) {
-        return $http.put(ENV.api['root'] + "origins", origin, {params: {id: id}}).then(
+        return $http.put(ENV.api.unstable + "origins", origin, {params: {id: id}}).then(
             function(response) {
                 messageModel.setMessages(response.data.alerts, false);
                 return response;
@@ -58,7 +58,7 @@ var OriginService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.deleteOrigin = function(id) {
-        return $http.delete(ENV.api['root'] + "origins", {params: {id: id}}).then(
+        return $http.delete(ENV.api.unstable + "origins", {params: {id: id}}).then(
             function(response) {
                 messageModel.setMessages(response.data.alerts, true);
                 return response;
diff --git a/traffic_portal/app/src/common/api/ParameterService.js b/traffic_portal/app/src/common/api/ParameterService.js
index 978dfcc..f87a64d 100644
--- a/traffic_portal/app/src/common/api/ParameterService.js
+++ b/traffic_portal/app/src/common/api/ParameterService.js
@@ -20,7 +20,7 @@
 var ParameterService = function($http, locationUtils, messageModel, ENV) {
 
     this.getParameters = function(queryParams) {
-        return $http.get(ENV.api['root'] + 'parameters', {params: queryParams}).then(
+        return $http.get(ENV.api.unstable + 'parameters', {params: queryParams}).then(
             function (result) {
                 return result.data.response
             },
@@ -31,7 +31,7 @@ var ParameterService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.getParameter = function(id) {
-        return $http.get(ENV.api['root'] + 'parameters', {params: {id: id}}).then(
+        return $http.get(ENV.api.unstable + 'parameters', {params: {id: id}}).then(
             function (result) {
                 return result.data.response[0];
             },
@@ -42,7 +42,7 @@ var ParameterService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.createParameter = function(parameter) {
-        return $http.post(ENV.api['root'] + 'parameters', parameter).then(
+        return $http.post(ENV.api.unstable + 'parameters', parameter).then(
             function(result) {
                 messageModel.setMessages([ { level: 'success', text: 'Parameter created' } ], true);
                 locationUtils.navigateToPath('/parameters/' + result.data.response.id + '/profiles');
@@ -57,7 +57,7 @@ var ParameterService = function($http, locationUtils, messageModel, ENV) {
 
     // todo: change to use query param when it is supported
     this.updateParameter = function(parameter) {
-        return $http.put(ENV.api['root'] + 'parameters/' + parameter.id, parameter).then(
+        return $http.put(ENV.api.unstable + 'parameters/' + parameter.id, parameter).then(
             function(result) {
                 messageModel.setMessages([ { level: 'success', text: 'Parameter updated' } ], false);
                 return result;
@@ -71,7 +71,7 @@ var ParameterService = function($http, locationUtils, messageModel, ENV) {
 
     // todo: change to use query param when it is supported
     this.deleteParameter = function(id) {
-        return $http.delete(ENV.api['root'] + "parameters/" + id).then(
+        return $http.delete(ENV.api.unstable + "parameters/" + id).then(
             function(result) {
                 return result.data;
             },
@@ -84,7 +84,7 @@ var ParameterService = function($http, locationUtils, messageModel, ENV) {
 
 
     this.getProfileParameters = function(profileId) {
-        return $http.get(ENV.api['root'] + 'profiles/' + profileId + '/parameters').then(
+        return $http.get(ENV.api.unstable + 'profiles/' + profileId + '/parameters').then(
             function (result) {
                 return result.data.response;
             },
diff --git a/traffic_portal/app/src/common/api/PhysLocationService.js b/traffic_portal/app/src/common/api/PhysLocationService.js
index b4ec97b..b8f4076 100644
--- a/traffic_portal/app/src/common/api/PhysLocationService.js
+++ b/traffic_portal/app/src/common/api/PhysLocationService.js
@@ -20,7 +20,7 @@
 var PhysLocationService = function($http, ENV, locationUtils, messageModel) {
 
     this.getPhysLocations = function(queryParams) {
-        return $http.get(ENV.api['root'] + 'phys_locations', {params: queryParams}).then(
+        return $http.get(ENV.api.unstable + 'phys_locations', {params: queryParams}).then(
             function (result) {
                 return result.data.response;
             },
@@ -31,7 +31,7 @@ var PhysLocationService = function($http, ENV, locationUtils, messageModel) {
     };
 
     this.getPhysLocation = function(id) {
-        return $http.get(ENV.api['root'] + 'phys_locations', {params: {id: id}}).then(
+        return $http.get(ENV.api.unstable + 'phys_locations', {params: {id: id}}).then(
             function(result) {
                 return result.data.response[0];
             },
@@ -42,7 +42,7 @@ var PhysLocationService = function($http, ENV, locationUtils, messageModel) {
     };
 
     this.createPhysLocation = function(physLocation) {
-        return $http.post(ENV.api['root'] + 'phys_locations', physLocation).then(
+        return $http.post(ENV.api.unstable + 'phys_locations', physLocation).then(
             function(result) {
                 messageModel.setMessages([ { level: 'success', text: 'Physical location created' } ], true);
                 locationUtils.navigateToPath('/phys-locations');
@@ -57,7 +57,7 @@ var PhysLocationService = function($http, ENV, locationUtils, messageModel) {
 
     // todo: change to use query param when it is supported
     this.updatePhysLocation = function(physLocation) {
-        return $http.put(ENV.api['root'] + 'phys_locations/' + physLocation.id, physLocation).then(
+        return $http.put(ENV.api.unstable + 'phys_locations/' + physLocation.id, physLocation).then(
             function(result) {
                 messageModel.setMessages([ { level: 'success', text: 'Physical location updated' } ], false);
                 return result;
@@ -71,7 +71,7 @@ var PhysLocationService = function($http, ENV, locationUtils, messageModel) {
 
     // todo: change to use query param when it is supported
     this.deletePhysLocation = function(id) {
-        return $http.delete(ENV.api['root'] + 'phys_locations/' + id).then(
+        return $http.delete(ENV.api.unstable + 'phys_locations/' + id).then(
             function(result) {
                 messageModel.setMessages([ { level: 'success', text: 'Physical location deleted' } ], true);
                 return result;
diff --git a/traffic_portal/app/src/common/api/ProfileParameterService.js b/traffic_portal/app/src/common/api/ProfileParameterService.js
index 9de8be7..af3f800 100644
--- a/traffic_portal/app/src/common/api/ProfileParameterService.js
+++ b/traffic_portal/app/src/common/api/ProfileParameterService.js
@@ -20,7 +20,7 @@
 var ProfileParameterService = function($http, messageModel, ENV) {
 
 	this.unlinkProfileParameter = function(profileId, paramId) {
-		return $http.delete(ENV.api['root'] + 'profileparameters/' + profileId + '/' + paramId).then(
+		return $http.delete(ENV.api.unstable + 'profileparameters/' + profileId + '/' + paramId).then(
 				function(result) {
 					messageModel.setMessages([ { level: 'success', text: 'Profile and parameter were unlinked.' } ], false);
 					return result;
@@ -33,7 +33,7 @@ var ProfileParameterService = function($http, messageModel, ENV) {
 	};
 
 	this.linkProfileParameters = function(profile, params) {
-		return $http.post(ENV.api['root'] + 'profileparameter', { profileId: profile.id, paramIds: params, replace: true }).then(
+		return $http.post(ENV.api.unstable + 'profileparameter', { profileId: profile.id, paramIds: params, replace: true }).then(
 			function(result) {
 				return result;
 			},
@@ -45,7 +45,7 @@ var ProfileParameterService = function($http, messageModel, ENV) {
 	};
 
 	this.linkParamProfiles = function(paramId, profiles) {
-		return $http.post(ENV.api['root'] + 'parameterprofile', { paramId: paramId, profileIds: profiles, replace: true }).then(
+		return $http.post(ENV.api.unstable + 'parameterprofile', { paramId: paramId, profileIds: profiles, replace: true }).then(
 			function(result) {
 				messageModel.setMessages([ { level: 'success', text: 'Profiles linked to parameter' } ], false);
 				return result;
diff --git a/traffic_portal/app/src/common/api/ProfileService.js b/traffic_portal/app/src/common/api/ProfileService.js
index d8e28f8..a482757 100644
--- a/traffic_portal/app/src/common/api/ProfileService.js
+++ b/traffic_portal/app/src/common/api/ProfileService.js
@@ -20,7 +20,7 @@
 var ProfileService = function($http, locationUtils, messageModel, ENV) {
 
     this.getProfiles = function(queryParams) {
-        return $http.get(ENV.api['root'] + 'profiles', {params: queryParams}).then(
+        return $http.get(ENV.api.unstable + 'profiles', {params: queryParams}).then(
             function(result) {
                 return result.data.response;
             },
@@ -31,7 +31,7 @@ var ProfileService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.getProfile = function(id) {
-        return $http.get(ENV.api['root'] + 'profiles', {params: {id: id}}).then(
+        return $http.get(ENV.api.unstable + 'profiles', {params: {id: id}}).then(
             function (result) {
                 return result.data.response[0];
             },
@@ -42,7 +42,7 @@ var ProfileService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.createProfile = function(profile) {
-        return $http.post(ENV.api['root'] + 'profiles', profile).then(
+        return $http.post(ENV.api.unstable + 'profiles', profile).then(
             function(result) {
                 messageModel.setMessages([ { level: 'success', text: 'Profile created' } ], true);
                 locationUtils.navigateToPath('/profiles/' + result.data.response.id + '/parameters');
@@ -57,7 +57,7 @@ var ProfileService = function($http, locationUtils, messageModel, ENV) {
 
     // todo: change to use query param when it is supported
     this.updateProfile = function(profile) {
-        return $http.put(ENV.api['root'] + 'profiles/' + profile.id, profile).then(
+        return $http.put(ENV.api.unstable + 'profiles/' + profile.id, profile).then(
             function(result) {
                 messageModel.setMessages([ { level: 'success', text: 'Profile updated' } ], false);
                 return result;
@@ -71,7 +71,7 @@ var ProfileService = function($http, locationUtils, messageModel, ENV) {
 
     // todo: change to use query param when it is supported
     this.deleteProfile = function(id) {
-        return $http.delete(ENV.api['root'] + "profiles/" + id).then(
+        return $http.delete(ENV.api.unstable + "profiles/" + id).then(
             function(result) {
                 return result.data;
             },
@@ -83,7 +83,7 @@ var ProfileService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.getParameterProfiles = function(paramId) {
-        return $http.get(ENV.api['root'] + 'profiles', {params: {param: paramId}}).then(
+        return $http.get(ENV.api.unstable + 'profiles', {params: {param: paramId}}).then(
             function (result) {
                 return result.data.response;
             },
@@ -94,7 +94,7 @@ var ProfileService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.cloneProfile = function(sourceName, cloneName) {
-        return $http.post(ENV.api['root'] + "profiles/name/" + cloneName + "/copy/" + sourceName).then(
+        return $http.post(ENV.api.unstable + "profiles/name/" + cloneName + "/copy/" + sourceName).then(
             function(result) {
                 messageModel.setMessages(result.data.alerts, true);
                 locationUtils.navigateToPath('/profiles/' + result.data.response.id);
@@ -108,7 +108,7 @@ var ProfileService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.exportProfile = function(id) {
-        return $http.get(ENV.api['root'] + "profiles/" + id + "/export").then(
+        return $http.get(ENV.api.unstable + "profiles/" + id + "/export").then(
             function(result) {
                 return result.data;
             },
@@ -119,7 +119,7 @@ var ProfileService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.importProfile = function(importJSON) {
-        return $http.post(ENV.api['root'] + "profiles/import", importJSON).then(
+        return $http.post(ENV.api.unstable + "profiles/import", importJSON).then(
             function(result) {
                 messageModel.setMessages(result.data.alerts, true);
                 locationUtils.navigateToPath('/profiles/' + result.data.response.id);
@@ -133,7 +133,7 @@ var ProfileService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.queueServerUpdatesByProfile = function(cdnID, profileName) {
-        return $http.post(ENV.api['root'] + 'cdns/' + cdnID + '/queue_update?profile=' + profileName, {action: "queue"}).then(
+        return $http.post(ENV.api.unstable + 'cdns/' + cdnID + '/queue_update?profile=' + profileName, {action: "queue"}).then(
             function(result) {
                 messageModel.setMessages([{level: 'success', text: 'Queued server updates by profile'}], false);
                 return result;
@@ -146,7 +146,7 @@ var ProfileService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.clearServerUpdatesByProfile = function(cdnID, profileName) {
-        return $http.post(ENV.api['root'] + 'cdns/' + cdnID + '/queue_update?profile=' + profileName, {action: "dequeue"}).then(
+        return $http.post(ENV.api.unstable + 'cdns/' + cdnID + '/queue_update?profile=' + profileName, {action: "dequeue"}).then(
             function(result) {
                 messageModel.setMessages([{level: 'success', text: 'Cleared server updates by profile'}], false);
                 return result;
diff --git a/traffic_portal/app/src/common/api/RegionService.js b/traffic_portal/app/src/common/api/RegionService.js
index 5b4e1b0..7b05809 100644
--- a/traffic_portal/app/src/common/api/RegionService.js
+++ b/traffic_portal/app/src/common/api/RegionService.js
@@ -20,7 +20,7 @@
 var RegionService = function($http, ENV, messageModel) {
 
     this.getRegions = function(queryParams) {
-        return $http.get(ENV.api['root'] + 'regions', {params: queryParams}).then(
+        return $http.get(ENV.api.unstable + 'regions', {params: queryParams}).then(
             function (result) {
                 return result.data.response;
             },
@@ -31,7 +31,7 @@ var RegionService = function($http, ENV, messageModel) {
     };
 
     this.getRegion = function(id) {
-        return $http.get(ENV.api['root'] + 'regions', {params: {id: id}}).then(
+        return $http.get(ENV.api.unstable + 'regions', {params: {id: id}}).then(
             function (result) {
                 return result.data.response[0];
             },
@@ -42,7 +42,7 @@ var RegionService = function($http, ENV, messageModel) {
     };
 
     this.createRegion = function(region) {
-        return $http.post(ENV.api['root'] + 'regions', region).then(
+        return $http.post(ENV.api.unstable + 'regions', region).then(
             function(result) {
                 messageModel.setMessages([ { level: 'success', text: 'Region created' } ], true);
                 return result;
@@ -56,7 +56,7 @@ var RegionService = function($http, ENV, messageModel) {
 
     // todo: change to use query param when it is supported
     this.updateRegion = function(region) {
-        return $http.put(ENV.api['root'] + 'regions/' + region.id, region).then(
+        return $http.put(ENV.api.unstable + 'regions/' + region.id, region).then(
             function(result) {
                 messageModel.setMessages([ { level: 'success', text: 'Region updated' } ], false);
                 return result;
@@ -70,7 +70,7 @@ var RegionService = function($http, ENV, messageModel) {
 
     // todo: change to use query param when it is supported
     this.deleteRegion = function(id) {
-        return $http.delete(ENV.api['root'] + "regions", {params: {id: id}}).then(
+        return $http.delete(ENV.api.unstable + "regions", {params: {id: id}}).then(
             function(result) {
                 messageModel.setMessages([ { level: 'success', text: 'Region deleted' } ], true);
                 return result;
diff --git a/traffic_portal/app/src/common/api/RoleService.js b/traffic_portal/app/src/common/api/RoleService.js
index 7fb864e..7d916fd 100644
--- a/traffic_portal/app/src/common/api/RoleService.js
+++ b/traffic_portal/app/src/common/api/RoleService.js
@@ -20,7 +20,7 @@
 var RoleService = function($http, messageModel, ENV) {
 
     this.getRoles = function(queryParams) {
-        return $http.get(ENV.api['root'] + 'roles', {params: queryParams}).then(
+        return $http.get(ENV.api.unstable + 'roles', {params: queryParams}).then(
             function (result) {
                 return result.data.response;
             },
@@ -31,7 +31,7 @@ var RoleService = function($http, messageModel, ENV) {
     };
 
     this.createRole = function(role) {
-        return $http.post(ENV.api['root'] + "roles", role).then(
+        return $http.post(ENV.api.unstable + "roles", role).then(
             function(result) {
                 return result.data;
             },
@@ -43,7 +43,7 @@ var RoleService = function($http, messageModel, ENV) {
     };
 
     this.updateRole = function(role) {
-        return $http.put(ENV.api['root'] + "roles", role, {params: {name: role.name}}).then(
+        return $http.put(ENV.api.unstable + "roles", role, {params: {name: role.name}}).then(
             function(result) {
                 return result.data;
             },
@@ -55,7 +55,7 @@ var RoleService = function($http, messageModel, ENV) {
     };
 
     this.deleteRole = function(name) {
-        return $http.delete(ENV.api['root'] + "roles", {params: {name: name}}).then(
+        return $http.delete(ENV.api.unstable + "roles", {params: {name: name}}).then(
             function(result) {
                 return result.data;
             },
diff --git a/traffic_portal/app/src/common/api/ServerCapabilityService.js b/traffic_portal/app/src/common/api/ServerCapabilityService.js
index 2f1793f..25913dc 100644
--- a/traffic_portal/app/src/common/api/ServerCapabilityService.js
+++ b/traffic_portal/app/src/common/api/ServerCapabilityService.js
@@ -20,7 +20,7 @@
 var ServerCapabilityService = function($http, ENV, locationUtils, messageModel) {
 
 	this.getServerCapabilities = function(queryParams) {
-		return $http.get(ENV.api['root'] + 'server_capabilities', {params: queryParams}).then(
+		return $http.get(ENV.api.unstable + 'server_capabilities', {params: queryParams}).then(
 			function(result) {
 				return result.data.response;
 			},
@@ -31,7 +31,7 @@ var ServerCapabilityService = function($http, ENV, locationUtils, messageModel)
 	};
 
 	this.getServerCapability = function(name) {
-		return $http.get(ENV.api['root'] + 'server_capabilities', {params: {"name": name}}).then(
+		return $http.get(ENV.api.unstable + 'server_capabilities', {params: {"name": name}}).then(
 			function(result) {
 				return result.data.response[0];
 			},
@@ -42,7 +42,7 @@ var ServerCapabilityService = function($http, ENV, locationUtils, messageModel)
 	};
 
 	this.createServerCapability = function(serverCap) {
-		return $http.post(ENV.api['root'] + 'server_capabilities', serverCap).then(
+		return $http.post(ENV.api.unstable + 'server_capabilities', serverCap).then(
 			function(result) {
 				messageModel.setMessages(result.data.alerts, true);
 				locationUtils.navigateToPath('/server-capabilities');
@@ -56,7 +56,7 @@ var ServerCapabilityService = function($http, ENV, locationUtils, messageModel)
 	};
 
 	this.deleteServerCapability = function(name) {
-		return $http.delete(ENV.api['root'] + 'server_capabilities', {params: {"name": name}}).then(
+		return $http.delete(ENV.api.unstable + 'server_capabilities', {params: {"name": name}}).then(
 			function(result) {
 				messageModel.setMessages(result.data.alerts, true);
 				return result;
@@ -69,7 +69,7 @@ var ServerCapabilityService = function($http, ENV, locationUtils, messageModel)
 	};
 
 	this.updateServerCapability = function(currentName, serverCapability) {
-		return $http.put(ENV.api['root'] + 'server_capabilities', serverCapability, {params: {"name": currentName}}).then(
+		return $http.put(ENV.api.unstable + 'server_capabilities', serverCapability, {params: {"name": currentName}}).then(
 			function(result) {
 				return result;
 			},
@@ -81,7 +81,7 @@ var ServerCapabilityService = function($http, ENV, locationUtils, messageModel)
 	};
 
 	this.getServerCapabilityServers = function(capabilityName) {
-		return $http.get(ENV.api['root'] + 'server_server_capabilities', { params: { serverCapability: capabilityName } }).then(
+		return $http.get(ENV.api.unstable + 'server_server_capabilities', { params: { serverCapability: capabilityName } }).then(
 			function (result) {
 				return result.data.response;
 			},
@@ -92,7 +92,7 @@ var ServerCapabilityService = function($http, ENV, locationUtils, messageModel)
 	};
 
 	this.getServerCapabilityDeliveryServices = function(capabilityName) {
-		return $http.get(ENV.api['root'] + 'deliveryservices_required_capabilities', { params: { requiredCapability: capabilityName } }).then(
+		return $http.get(ENV.api.unstable + 'deliveryservices_required_capabilities', { params: { requiredCapability: capabilityName } }).then(
 			function (result) {
 				return result.data.response;
 			},
diff --git a/traffic_portal/app/src/common/api/ServerService.js b/traffic_portal/app/src/common/api/ServerService.js
index 8dca692..40a9f92 100644
--- a/traffic_portal/app/src/common/api/ServerService.js
+++ b/traffic_portal/app/src/common/api/ServerService.js
@@ -20,7 +20,7 @@
 var ServerService = function($http, locationUtils, messageModel, ENV) {
 
     this.getServers = function(queryParams) {
-        return $http.get(ENV.api['root'] + 'servers', {params: queryParams}).then(
+        return $http.get(ENV.api.unstable + 'servers', {params: queryParams}).then(
             function (result){
                 return result.data.response;
             },
@@ -31,7 +31,7 @@ var ServerService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.createServer = function(server) {
-        return $http.post(ENV.api['root'] + 'servers', server).then(
+        return $http.post(ENV.api.unstable + 'servers', server).then(
             function(result) {
                 return result;
             },
@@ -43,7 +43,7 @@ var ServerService = function($http, locationUtils, messageModel, ENV) {
 
     // todo: change to use query param when it is supported
     this.updateServer = function(server) {
-        return $http.put(ENV.api['root'] + 'servers/' + server.id, server).then(
+        return $http.put(ENV.api.unstable + 'servers/' + server.id, server).then(
             function(result) {
                 return result;
             },
@@ -55,7 +55,7 @@ var ServerService = function($http, locationUtils, messageModel, ENV) {
 
     // todo: change to use query param when it is supported
     this.deleteServer = function(id) {
-        return $http.delete(ENV.api['root'] + "servers/" + id).then(
+        return $http.delete(ENV.api.unstable + "servers/" + id).then(
             function(result) {
                 return result.data;
             },
@@ -67,7 +67,7 @@ var ServerService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.getServerCapabilities = function(id) {
-        return $http.get(ENV.api['root'] + 'server_server_capabilities', { params: { serverId: id } }).then(
+        return $http.get(ENV.api.unstable + 'server_server_capabilities', { params: { serverId: id } }).then(
             function (result) {
                 return result.data.response;
             },
@@ -78,7 +78,7 @@ var ServerService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.addServerCapability = function(serverId, capabilityName) {
-        return $http.post(ENV.api['root'] + 'server_server_capabilities', { serverId: serverId, serverCapability: capabilityName}).then(
+        return $http.post(ENV.api.unstable + 'server_server_capabilities', { serverId: serverId, serverCapability: capabilityName}).then(
             function(result) {
                 return result.data;
             },
@@ -90,7 +90,7 @@ var ServerService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.removeServerCapability = function(serverId, capabilityName) {
-        return $http.delete(ENV.api['root'] + 'server_server_capabilities', { params: { serverId: serverId, serverCapability: capabilityName} }).then(
+        return $http.delete(ENV.api.unstable + 'server_server_capabilities', { params: { serverId: serverId, serverCapability: capabilityName} }).then(
             function(result) {
                 return result.data;
             },
@@ -102,7 +102,7 @@ var ServerService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.getEligibleDeliveryServiceServers = function(dsId) {
-        return $http.get(ENV.api['root'] + 'deliveryservices/' + dsId + '/servers/eligible').then(
+        return $http.get(ENV.api.unstable + 'deliveryservices/' + dsId + '/servers/eligible').then(
             function (result) {
                 return result.data.response;
             },
@@ -113,7 +113,7 @@ var ServerService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.assignDeliveryServices = function(server, dsIds, replace, delay) {
-        return $http.post(ENV.api['root'] + 'servers/' + server.id + '/deliveryservices', dsIds, {params: {replace: replace}}).then(
+        return $http.post(ENV.api.unstable + 'servers/' + server.id + '/deliveryservices', dsIds, {params: {replace: replace}}).then(
             function(result) {
                 messageModel.setMessages([ { level: 'success', text: dsIds.length + ' delivery services assigned to ' + server.hostName + '.' + server.domainName } ], delay);
                 return result;
@@ -126,7 +126,7 @@ var ServerService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.queueServerUpdates = function(id) {
-        return $http.post(ENV.api['root'] + "servers/" + id + '/queue_update', { action: "queue"}).then(
+        return $http.post(ENV.api.unstable + "servers/" + id + '/queue_update', { action: "queue"}).then(
             function(result) {
                 messageModel.setMessages([ { level: 'success', text: 'Queued server updates' } ], false);
                 return result;
@@ -139,7 +139,7 @@ var ServerService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.clearServerUpdates = function(id) {
-        return $http.post(ENV.api['root'] + "servers/" + id + '/queue_update', { action: "dequeue"}).then(
+        return $http.post(ENV.api.unstable + "servers/" + id + '/queue_update', { action: "dequeue"}).then(
             function(result) {
                 messageModel.setMessages([ { level: 'success', text: 'Cleared server updates' } ], false);
                 return result;
@@ -152,7 +152,7 @@ var ServerService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.getCacheStats = function() {
-        return $http.get(ENV.api['root'] + "caches/stats").then(
+        return $http.get(ENV.api.unstable + "caches/stats").then(
             function(result) {
                 return result.data.response;
             },
@@ -163,7 +163,7 @@ var ServerService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.getCacheChecks = function() {
-        return $http.get(ENV.api['root'] + "servercheck").then(
+        return $http.get(ENV.api.unstable + "servercheck").then(
             function(result) {
                 return result.data.response;
             },
@@ -174,7 +174,7 @@ var ServerService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.updateStatus = function(id, payload) {
-        return $http.put(ENV.api['root'] + "servers/" + id + "/status", payload).then(
+        return $http.put(ENV.api.unstable + "servers/" + id + "/status", payload).then(
             function(result) {
                 return result;
             },
diff --git a/traffic_portal/app/src/common/api/ServiceCategoryService.js b/traffic_portal/app/src/common/api/ServiceCategoryService.js
index 9c1fd3a..8f747e2 100644
--- a/traffic_portal/app/src/common/api/ServiceCategoryService.js
+++ b/traffic_portal/app/src/common/api/ServiceCategoryService.js
@@ -20,7 +20,7 @@
 var ServiceCategoryService = function($http, ENV, locationUtils, messageModel) {
 
     this.getServiceCategories = function(queryParams) {
-        return $http.get(ENV.api['root'] + 'service_categories', {params: queryParams}).then(
+        return $http.get(ENV.api.unstable + 'service_categories', {params: queryParams}).then(
             function(result) {
                 return result.data.response;
             },
@@ -31,7 +31,7 @@ var ServiceCategoryService = function($http, ENV, locationUtils, messageModel) {
     };
 
     this.getServiceCategory = function(name) {
-        return $http.get(ENV.api['root'] + 'service_categories', {params: {name: name}}).then(
+        return $http.get(ENV.api.unstable + 'service_categories', {params: {name: name}}).then(
             function(result) {
                 return result.data.response[0];
             },
@@ -42,7 +42,7 @@ var ServiceCategoryService = function($http, ENV, locationUtils, messageModel) {
     };
 
     this.createServiceCategory = function(serviceCategory) {
-        return $http.post(ENV.api['root'] + 'service_categories', serviceCategory).then(
+        return $http.post(ENV.api.unstable + 'service_categories', serviceCategory).then(
             function(result) {
                 messageModel.setMessages(result.data.alerts, true);
                 locationUtils.navigateToPath('/service-categories');
@@ -56,7 +56,7 @@ var ServiceCategoryService = function($http, ENV, locationUtils, messageModel) {
     };
 
     this.updateServiceCategory = function(serviceCategory, oldName) {
-        return $http.put(ENV.api['root'] + 'service_categories/' + encodeURIComponent(oldName), serviceCategory).then(
+        return $http.put(ENV.api.unstable + 'service_categories/' + encodeURIComponent(oldName), serviceCategory).then(
             function(result) {
                 messageModel.setMessages(result.data.alerts, true);
 				locationUtils.navigateToPath('/service-categories/edit?name=' + encodeURIComponent(serviceCategory.name));
@@ -69,7 +69,7 @@ var ServiceCategoryService = function($http, ENV, locationUtils, messageModel) {
     };
 
     this.deleteServiceCategory = function(name) {
-        return $http.delete(ENV.api['root'] + 'service_categories/' + encodeURIComponent(name)).then(
+        return $http.delete(ENV.api.unstable + 'service_categories/' + encodeURIComponent(name)).then(
             function(result) {
                 messageModel.setMessages(result.data.alerts, true);
                 return result;
diff --git a/traffic_portal/app/src/common/api/StaticDnsEntryService.js b/traffic_portal/app/src/common/api/StaticDnsEntryService.js
index 64a42e5..f4c57ea 100644
--- a/traffic_portal/app/src/common/api/StaticDnsEntryService.js
+++ b/traffic_portal/app/src/common/api/StaticDnsEntryService.js
@@ -20,7 +20,7 @@
 var StaticDnsEntryService = function($http, locationUtils, messageModel, ENV) {
 
 	this.getStaticDnsEntries = function(queryParams) {
-        return $http.get(ENV.api['root'] + 'staticdnsentries', {params: queryParams}).then(
+        return $http.get(ENV.api.unstable + 'staticdnsentries', {params: queryParams}).then(
             function (result) {
                 return result.data.response;
             },
@@ -31,7 +31,7 @@ var StaticDnsEntryService = function($http, locationUtils, messageModel, ENV) {
 	};
 
 	this.getStaticDnsEntry = function(id) {
-        return $http.get(ENV.api['root'] + 'staticdnsentries', {params: {id: id}}).then(
+        return $http.get(ENV.api.unstable + 'staticdnsentries', {params: {id: id}}).then(
             function (result) {
                 return result.data.response[0];
             },
@@ -42,7 +42,7 @@ var StaticDnsEntryService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.createDeliveryServiceStaticDnsEntry = function(staticDnsEntry) {
-        return $http.post(ENV.api['root'] + "staticdnsentries", staticDnsEntry).then(
+        return $http.post(ENV.api.unstable + "staticdnsentries", staticDnsEntry).then(
             function(response) {
                 messageModel.setMessages(response.data.alerts, true);
                 locationUtils.navigateToPath('/delivery-services/' + staticDnsEntry.deliveryServiceId + '/static-dns-entries');
@@ -56,7 +56,7 @@ var StaticDnsEntryService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.deleteDeliveryServiceStaticDnsEntry = function(id) {
-        return $http.delete(ENV.api['root'] + "staticdnsentries", {params: {id: id}}).then(
+        return $http.delete(ENV.api.unstable + "staticdnsentries", {params: {id: id}}).then(
             function(response) {
                 messageModel.setMessages(response.data.alerts, true);
                 return response;
@@ -69,7 +69,7 @@ var StaticDnsEntryService = function($http, locationUtils, messageModel, ENV) {
     };
 
     this.updateDeliveryServiceStaticDnsEntry = function(id, staticDnsEntry) {
-        return $http.put(ENV.api['root'] + "staticdnsentries", staticDnsEntry, {params: {id: id}}).then(
+        return $http.put(ENV.api.unstable + "staticdnsentries", staticDnsEntry, {params: {id: id}}).then(
             function(response) {
                 messageModel.setMessages(response.data.alerts, false);
                 return response;
diff --git a/traffic_portal/app/src/common/api/StatusService.js b/traffic_portal/app/src/common/api/StatusService.js
index 4cc10ec..d6cb25d 100644
--- a/traffic_portal/app/src/common/api/StatusService.js
+++ b/traffic_portal/app/src/common/api/StatusService.js
@@ -20,7 +20,7 @@
 var StatusService = function($http, ENV, locationUtils, messageModel) {
 
     this.getStatuses = function(queryParams) {
-        return $http.get(ENV.api['root'] + 'statuses', {params: queryParams}).then(
+        return $http.get(ENV.api.unstable + 'statuses', {params: queryParams}).then(
             function (result) {
                 return result.data.response;
             },
@@ -31,7 +31,7 @@ var StatusService = function($http, ENV, locationUtils, messageModel) {
     };
 
     this.getStatus = function(id) {
-        return $http.get(ENV.api['root'] + 'statuses', {params: {id: id}}).then(
+        return $http.get(ENV.api.unstable + 'statuses', {params: {id: id}}).then(
             function (result) {
                 return result.data.response[0];
             },
@@ -42,7 +42,7 @@ var StatusService = function($http, ENV, locationUtils, messageModel) {
     };
 
     this.createStatus = function(status) {
-        return $http.post(ENV.api['root'] + 'statuses', status).then(
+        return $http.post(ENV.api.unstable + 'statuses', status).then(
             function(result) {
                 messageModel.setMessages([ { level: 'success', text: 'Status created' } ], true);
                 locationUtils.navigateToPath('/statuses');
@@ -57,7 +57,7 @@ var StatusService = function($http, ENV, locationUtils, messageModel) {
 
     // todo: change to use query param when it is supported
     this.updateStatus = function(status) {
-        return $http.put(ENV.api['root'] + 'statuses/' + status.id, status).then(
+        return $http.put(ENV.api.unstable + 'statuses/' + status.id, status).then(
             function(result) {
                 messageModel.setMessages([ { level: 'success', text: 'Status updated' } ], false);
                 return result;
@@ -71,7 +71,7 @@ var StatusService = function($http, ENV, locationUtils, messageModel) {
 
     // todo: change to use query param when it is supported
     this.deleteStatus = function(id) {
-        return $http.delete(ENV.api['root'] + "statuses/" + id).then(
+        return $http.delete(ENV.api.unstable + "statuses/" + id).then(
             function(result) {
                 messageModel.setMessages([ { level: 'success', text: 'Status deleted' } ], true);
                 return result;
diff --git a/traffic_portal/app/src/common/api/TenantService.js b/traffic_portal/app/src/common/api/TenantService.js
index 15f194b..55dd248 100644
--- a/traffic_portal/app/src/common/api/TenantService.js
+++ b/traffic_portal/app/src/common/api/TenantService.js
@@ -20,7 +20,7 @@
 var TenantService = function($http, ENV, messageModel) {
 
     this.getTenants = function(queryParams) {
-        return $http.get(ENV.api['root'] + 'tenants', {params: queryParams}).then(
+        return $http.get(ENV.api.unstable + 'tenants', {params: queryParams}).then(
             function (result) {
                 return result.data.response;
             },
@@ -31,7 +31,7 @@ var TenantService = function($http, ENV, messageModel) {
     };
 
     this.getTenant = function(id) {
-        return $http.get(ENV.api['root'] + 'tenants', {params: {id: id}}).then(
+        return $http.get(ENV.api.unstable + 'tenants', {params: {id: id}}).then(
             function (result) {
                 return result.data.response[0];
             },
@@ -42,7 +42,7 @@ var TenantService = function($http, ENV, messageModel) {
     };
 
     this.createTenant = function(tenant) {
-        return $http.post(ENV.api['root'] + 'tenants', tenant).then(
+        return $http.post(ENV.api.unstable + 'tenants', tenant).then(
             function(result) {
                 messageModel.setMessages([ { level: 'success', text: 'Tenant created' } ], true);
                 return result;
@@ -56,7 +56,7 @@ var TenantService = function($http, ENV, messageModel) {
 
     // todo: change to use query param when it is supported
     this.updateTenant = function(tenant) {
-        return $http.put(ENV.api['root'] + 'tenants/' + tenant.id, tenant).then(
+        return $http.put(ENV.api.unstable + 'tenants/' + tenant.id, tenant).then(
             function(result) {
                 messageModel.setMessages([ { level: 'success', text: 'Tenant updated' } ], false);
                 return result;
@@ -70,7 +70,7 @@ var TenantService = function($http, ENV, messageModel) {
 
     // todo: change to use query param when it is supported
     this.deleteTenant = function(id) {
-        return $http.delete(ENV.api['root'] + "tenants/" + id).then(
+        return $http.delete(ENV.api.unstable + "tenants/" + id).then(
             function(result) {
                 return result;
             },
diff --git a/traffic_portal/app/src/common/api/ToolsService.js b/traffic_portal/app/src/common/api/ToolsService.js
index dedc462..5007072 100644
--- a/traffic_portal/app/src/common/api/ToolsService.js
+++ b/traffic_portal/app/src/common/api/ToolsService.js
@@ -20,7 +20,7 @@
 var ToolsService = function($http, messageModel, ENV) {
 
 	this.getOSVersions = function() {
-		return $http.get(ENV.api['root'] + "osversions").then(
+		return $http.get(ENV.api.unstable + "osversions").then(
 				function(result) {
 					return result.data.response;
 				},
@@ -33,7 +33,7 @@ var ToolsService = function($http, messageModel, ENV) {
 	this.generateISO = function(iso) {
 		respType = 'arraybuffer';
 
-		return $http.post(ENV.api['root'] + "isos", iso, { responseType:respType }).then(
+		return $http.post(ENV.api.unstable + "isos", iso, { responseType:respType }).then(
 			function(result) {
 				const isoName = iso.hostName + "." + iso.domainName + "-" + iso.osversionDir + ".iso";
 				download(result.data, isoName);
diff --git a/traffic_portal/app/src/common/api/TopologyService.js b/traffic_portal/app/src/common/api/TopologyService.js
index 7deddba..b2d7954 100644
--- a/traffic_portal/app/src/common/api/TopologyService.js
+++ b/traffic_portal/app/src/common/api/TopologyService.js
@@ -20,7 +20,7 @@
 var TopologyService = function($http, ENV, locationUtils, messageModel) {
 
 	this.getTopologies = function(queryParams) {
-		return $http.get(ENV.api['root'] + 'topologies', { params: queryParams }).then(
+		return $http.get(ENV.api.unstable + 'topologies', { params: queryParams }).then(
 			function(result) {
 				return result.data.response;
 			},
@@ -31,7 +31,7 @@ var TopologyService = function($http, ENV, locationUtils, messageModel) {
 	};
 
 	this.createTopology = function(topology) {
-		return $http.post(ENV.api['root'] + 'topologies', topology).then(
+		return $http.post(ENV.api.unstable + 'topologies', topology).then(
 			function(result) {
 				return result;
 			},
@@ -43,7 +43,7 @@ var TopologyService = function($http, ENV, locationUtils, messageModel) {
 	};
 
 	this.updateTopology = function(topology, currentName) {
-		return $http.put(ENV.api['root'] + 'topologies', topology, { params: { name: currentName } }).then(
+		return $http.put(ENV.api.unstable + 'topologies', topology, { params: { name: currentName } }).then(
 			function(result) {
 				return result;
 			},
@@ -55,7 +55,7 @@ var TopologyService = function($http, ENV, locationUtils, messageModel) {
 	};
 
 	this.deleteTopology = function(topology) {
-		return $http.delete(ENV.api['root'] + "topologies", { params: { name: topology.name } }).then(
+		return $http.delete(ENV.api.unstable + "topologies", { params: { name: topology.name } }).then(
 			function(result) {
 				return result;
 			},
@@ -67,7 +67,7 @@ var TopologyService = function($http, ENV, locationUtils, messageModel) {
 	};
 
 	this.queueServerUpdates = function(topology, cdnId) {
-		return $http.post(ENV.api['root'] + 'topologies/' + topology + '/queue_update', {action: "queue", cdnId: cdnId}).then(
+		return $http.post(ENV.api.unstable + 'topologies/' + topology + '/queue_update', {action: "queue", cdnId: cdnId}).then(
 			function(result) {
 				messageModel.setMessages([{level: 'success', text: 'Queued topology server updates'}], false);
 				return result;
@@ -80,7 +80,7 @@ var TopologyService = function($http, ENV, locationUtils, messageModel) {
 	};
 
 	this.clearServerUpdates = function(topology, cdnId) {
-		return $http.post(ENV.api['root'] + 'topologies/' + topology + '/queue_update', {action: "dequeue", cdnId: cdnId}).then(
+		return $http.post(ENV.api.unstable + 'topologies/' + topology + '/queue_update', {action: "dequeue", cdnId: cdnId}).then(
 			function(result) {
 				messageModel.setMessages([{level: 'success', text: 'Cleared topology server updates'}], false);
 				return result;
diff --git a/traffic_portal/app/src/common/api/TrafficPortalService.js b/traffic_portal/app/src/common/api/TrafficPortalService.js
index cec27e6..dec2923 100644
--- a/traffic_portal/app/src/common/api/TrafficPortalService.js
+++ b/traffic_portal/app/src/common/api/TrafficPortalService.js
@@ -46,7 +46,7 @@ var TrafficPortalService = function($http, messageModel, ENV) {
         responseType=arraybuffer is important if you want to create a blob of your data
         See: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data
         */
-        return $http.get(ENV.api['root'] + 'dbdump', { responseType:'arraybuffer' } ).then(
+        return $http.get(ENV.api.unstable + 'dbdump', { responseType:'arraybuffer' } ).then(
             function(result) {
                 download(result.data, moment().format() + '.pg_dump');
                 return result;
diff --git a/traffic_portal/app/src/common/api/TypeService.js b/traffic_portal/app/src/common/api/TypeService.js
index c5a3991..d37a0fd 100644
--- a/traffic_portal/app/src/common/api/TypeService.js
+++ b/traffic_portal/app/src/common/api/TypeService.js
@@ -20,7 +20,7 @@
 var TypeService = function($http, ENV, locationUtils, messageModel) {
 
     this.getTypes = function(queryParams) {
-        return $http.get(ENV.api['root'] + 'types', {params: queryParams}).then(
+        return $http.get(ENV.api.unstable + 'types', {params: queryParams}).then(
             function (result) {
                 return result.data.response;
             },
@@ -31,7 +31,7 @@ var TypeService = function($http, ENV, locationUtils, messageModel) {
     };
 
     this.getType = function(id) {
-        return $http.get(ENV.api['root'] + 'types', {params: {id: id}}).then(
+        return $http.get(ENV.api.unstable + 'types', {params: {id: id}}).then(
             function (result) {
                 return result.data.response[0];
             },
@@ -42,7 +42,7 @@ var TypeService = function($http, ENV, locationUtils, messageModel) {
     };
 
     this.createType = function(type) {
-        return $http.post(ENV.api['root'] + 'types', type).then(
+        return $http.post(ENV.api.unstable + 'types', type).then(
             function(result) {
                 messageModel.setMessages([ { level: 'success', text: 'Type created' } ], true);
                 locationUtils.navigateToPath('/types');
@@ -57,7 +57,7 @@ var TypeService = function($http, ENV, locationUtils, messageModel) {
 
     // todo: change to use query param when it is supported
     this.updateType = function(type) {
-        return $http.put(ENV.api['root'] + 'types/' + type.id, type).then(
+        return $http.put(ENV.api.unstable + 'types/' + type.id, type).then(
             function(result) {
                 messageModel.setMessages([ { level: 'success', text: 'Type updated' } ], false);
                 return result;
@@ -71,7 +71,7 @@ var TypeService = function($http, ENV, locationUtils, messageModel) {
 
     // todo: change to use query param when it is supported
     this.deleteType = function(id) {
-        return $http.delete(ENV.api['root'] + "types/" + id).then(
+        return $http.delete(ENV.api.unstable + "types/" + id).then(
             function(result) {
                 messageModel.setMessages([ { level: 'success', text: 'Type deleted' } ], true);
                 return result;
@@ -84,7 +84,7 @@ var TypeService = function($http, ENV, locationUtils, messageModel) {
     };
 
     this.queueServerUpdates = function(cdnID, typeName) {
-        return $http.post(ENV.api['root'] + 'cdns/' + cdnID +'/queue_update?type=' + typeName, {action: "queue"}).then(
+        return $http.post(ENV.api.unstable + 'cdns/' + cdnID +'/queue_update?type=' + typeName, {action: "queue"}).then(
             function(result) {
                 messageModel.setMessages([{level: 'success', text: 'Queued server updates by type'}], false);
                 return result;
@@ -97,7 +97,7 @@ var TypeService = function($http, ENV, locationUtils, messageModel) {
     };
 
     this.clearServerUpdates = function(cdnID, typeName) {
-        return $http.post(ENV.api['root'] + 'cdns/' + cdnID + '/queue_update?type=' + typeName, {action: "dequeue"}).then(
+        return $http.post(ENV.api.unstable + 'cdns/' + cdnID + '/queue_update?type=' + typeName, {action: "dequeue"}).then(
             function(result) {
                 messageModel.setMessages([{level: 'success', text: 'Cleared server updates by type'}], false);
                 return result;
diff --git a/traffic_portal/app/src/common/api/UserService.js b/traffic_portal/app/src/common/api/UserService.js
index 1d072b0..11195af 100644
--- a/traffic_portal/app/src/common/api/UserService.js
+++ b/traffic_portal/app/src/common/api/UserService.js
@@ -20,7 +20,7 @@
 var UserService = function($http, locationUtils, userModel, messageModel, ENV) {
 
     this.getCurrentUser = function() {
-        return $http.get(ENV.api['root'] + "user/current").then(
+        return $http.get(ENV.api.unstable + "user/current").then(
             function(result) {
                 userModel.setUser(result.data.response);
                 return result.data.response;
@@ -32,7 +32,7 @@ var UserService = function($http, locationUtils, userModel, messageModel, ENV) {
     };
 
     this.resetPassword = function(email) {
-        return $http.post(ENV.api['root'] + "user/reset_password", { email: email }).then(
+        return $http.post(ENV.api.unstable + "user/reset_password", { email: email }).then(
             function(result) {
                 messageModel.setMessages(result.data.alerts, false);
                 return result;
@@ -45,7 +45,7 @@ var UserService = function($http, locationUtils, userModel, messageModel, ENV) {
     };
 
     this.getUsers = function(queryParams) {
-        return $http.get(ENV.api['root'] + 'users', {params: queryParams}).then(
+        return $http.get(ENV.api.unstable + 'users', {params: queryParams}).then(
             function (result) {
                 return result.data.response;
             },
@@ -57,7 +57,7 @@ var UserService = function($http, locationUtils, userModel, messageModel, ENV) {
     };
 
     this.getUser = function(id) {
-        return $http.get(ENV.api['root'] + 'users', {params: {id: id}}).then(
+        return $http.get(ENV.api.unstable + 'users', {params: {id: id}}).then(
             function (result) {
                 return result.data.response[0];
             },
@@ -69,7 +69,7 @@ var UserService = function($http, locationUtils, userModel, messageModel, ENV) {
     };
 
     this.createUser = function(user) {
-        return $http.post(ENV.api['root'] + 'users', user).then(
+        return $http.post(ENV.api.unstable + 'users', user).then(
             function(result) {
                 messageModel.setMessages([ { level: 'success', text: 'User created' } ], true);
                 locationUtils.navigateToPath('/users');
@@ -84,7 +84,7 @@ var UserService = function($http, locationUtils, userModel, messageModel, ENV) {
 
     // todo: change to use query param when it is supported
     this.updateUser = function(user) {
-        return $http.put(ENV.api['root'] + "users/" + user.id, user).then(
+        return $http.put(ENV.api.unstable + "users/" + user.id, user).then(
             function(result) {
                 if (userModel.user.id === user.id) {
                     // if you are updating the currently logged in user...
@@ -101,7 +101,7 @@ var UserService = function($http, locationUtils, userModel, messageModel, ENV) {
     };
 
     this.registerUser = function(registration) {
-        return $http.post(ENV.api['root'] + "users/register", registration).then(
+        return $http.post(ENV.api.unstable + "users/register", registration).then(
             function(result) {
                 messageModel.setMessages(result.data.alerts, false);
                 return result;
diff --git a/traffic_portal/app/src/scripts/config.js b/traffic_portal/app/src/scripts/config.js
index 52e5f0c..fd9b322 100644
--- a/traffic_portal/app/src/scripts/config.js
+++ b/traffic_portal/app/src/scripts/config.js
@@ -23,4 +23,4 @@
 
 angular.module('config', [])
 
-.constant('ENV', { api: { root:'/api/4.0/', stable: "/api/3.1/" } });
+.constant('ENV', { api: { unstable:'/api/4.0/', stable: "/api/3.1/" } });