diff --git a/_app/main.js b/_app/main.js index e731e92d8..82705eb84 100644 --- a/_app/main.js +++ b/_app/main.js @@ -650,6 +650,9 @@ App.Views = {}; // deal with common-lang-blocks this.toggleCommonLangBlocks(); + // setup the server/mount path editor + this.setupServerFieldCustomization(); + // add toggles to code blocks if necessary if (this.platform === "ios" || this.platform === "osx" || this.platform === "macos") { new App.Views.Docs.Toggle({ @@ -729,6 +732,123 @@ App.Views = {}; } }, + setupServerFieldCustomization: function setupServerFieldCustomization() { + + if(!document.getElementById('parse-server-custom-url')) { + // no customization available on this page + return; + } + + if (typeof(Storage) !== "undefined") { + // apply previous values from local storage + const _url = localStorage.getItem('parse-server-custom-url'); + const _mount = localStorage.getItem('parse-server-custom-mount'); + const _protocol = localStorage.getItem('parse-server-custom-protocol'); + const _appId = localStorage.getItem('parse-server-custom-appid'); + const _clientKey = localStorage.getItem('parse-server-custom-clientkey'); + + // set existing entries + if (_url) { + $(".custom-parse-server-url").html(_url); + $("#parse-server-custom-url").val(_url); + } + if (_mount) { + $(".custom-parse-server-mount").html(_mount); + $("#parse-server-custom-mount").val(_mount); + } + if (_protocol) { + $(".custom-parse-server-protocol").html(_protocol); + $("#parse-server-custom-protocol").val(_protocol); + } + if (_appId) { + $(".custom-parse-server-appid").html(_appId); + $("#parse-server-custom-appid").val(_appId); + } + if (_clientKey) { + $(".custom-parse-server-clientkey").html(_clientKey); + $("#parse-server-custom-clientkey").val(_clientKey); + } + } + + // set url listener + $('#parse-server-custom-url').keyup(function() { + const url = $('#parse-server-custom-url').val(); + if(!url.match(/^[-_a-z0-9\.]+(?::[0-9]+)?$/i)) { + // not a valid url + return; + } + $(".custom-parse-server-url").html(url); + if (typeof(Storage) !== "undefined") { + localStorage.setItem('parse-server-custom-url', url); + } + }); + + // set mount listener + $('#parse-server-custom-mount').keyup(function() { + var mount = $('#parse-server-custom-mount').val(); + if(!mount.match(/^[-_a-z0-9\/]+$/i) && mount !== '') { + // not a valid mount path, and not empty + return; + } + if(!mount.match(/^\//)) { + // add leading slash + mount = '/'+mount; + } + if(!mount.match(/\/$/)) { + // add trailing slash + mount = mount+'/'; + } + $(".custom-parse-server-mount").html(mount); + if (typeof(Storage) !== "undefined") { + localStorage.setItem('parse-server-custom-mount', mount); + } + }); + + // set protocol listener + $('#parse-server-custom-protocol').change(function() { + const protocol = $('#parse-server-custom-protocol').val(); + if(!protocol.match(/^[a-z]+$/)) { + // not a valid protocol + return; + } + $(".custom-parse-server-protocol").html(protocol); + if (typeof(Storage) !== "undefined") { + localStorage.setItem('parse-server-custom-protocol', protocol); + } + }); + + // set appId listener + $('#parse-server-custom-appid').keyup(function() { + var appId = $('#parse-server-custom-appid').val(); + if(!appId.match(/^[^\s]+$/i)) { + // not a valid appId + return; + } + // encode any html + appId = appId.replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"'); + $(".custom-parse-server-appid").html(appId); + if (typeof(Storage) !== "undefined") { + localStorage.setItem('parse-server-custom-appid', appId); + } + }); + + // set clientKey listener + $('#parse-server-custom-clientkey').keyup(function() { + var clientKey = $('#parse-server-custom-clientkey').val(); + if(!clientKey.match(/^[^\s]+$/i)) { + // not a valid appId + return; + } + // encode any html + clientKey = clientKey.replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"'); + $(".custom-parse-server-clientkey").html(clientKey); + if (typeof(Storage) !== "undefined") { + localStorage.setItem('parse-server-custom-clientkey', clientKey); + } + }); + + }, + // we recalculate the header heights for the TOC // highlighting when the height of the content changes handleToggleChange: function() { @@ -753,7 +873,7 @@ $('pre code').each(function(i, block) { hljs.highlightBlock(block); }); -var platform = window.location.pathname.split('/')[2]; +var platform = window.location.pathname.split('/')[1]; if (platform) { new App.Views.Docs.Main({ language: 'en', diff --git a/_includes/android/push-notifications.md b/_includes/android/push-notifications.md index c3b348aa6..3b4592fd9 100644 --- a/_includes/android/push-notifications.md +++ b/_includes/android/push-notifications.md @@ -480,7 +480,7 @@ curl -X GET \ -G \ --data-urlencode 'limit=1000' \ --data-urlencode 'where={ "city": "San Francisco", "deviceType": { "$in": [ "ios", "android", "winphone", "embedded" ] } }' \ -https://api.parse.com/1/installations +https://YOUR.PARSE-SERVER.HERE/parse/installations ``` If you type the above into a console, you should be able to see the first 1,000 objects that match your query. Note that constraints are always ANDed, so if you want to further reduce the search scope, you can add a constraint that matches the specific installation for your device: @@ -493,7 +493,7 @@ curl -X GET \ -G \ --data-urlencode 'limit=1' \ --data-urlencode 'where={ “objectId”: {YOUR_INSTALLATION_OBJECT_ID}, "city": "San Francisco", "deviceType": { "$in": [ "ios", "android", "winphone", "embedded" ] } }' \ -https://api.parse.com/1/installations +https://YOUR.PARSE-SERVER.HERE/parse/installations ``` If the above query returns no results, it is likely that your installation does not meet the targeting criteria for your campaign. diff --git a/_includes/arduino/other.md b/_includes/arduino/other.md index c34e16308..465b0ba46 100644 --- a/_includes/arduino/other.md +++ b/_includes/arduino/other.md @@ -5,7 +5,7 @@ Because the Arduino SDK was designed to minimize memory footprint, it doesn't pr For example, you could sign up a user from Arduino through a REST call: ```cpp -ParseResponse response = Parse.sendRequest("POST", "/1/users", "{\"username\":\"cooldude6\",\"password\":\"p_n7!-e8\"}", ""); +ParseResponse response = Parse.sendRequest("POST", "/parse/users", "{\"username\":\"cooldude6\",\"password\":\"p_n7!-e8\"}", ""); ``` In this case, the response will contain the objectId of the created user, assuming it was created successfully. diff --git a/_includes/arduino/requests.md b/_includes/arduino/requests.md index de44dafba..5fd2aa1d3 100644 --- a/_includes/arduino/requests.md +++ b/_includes/arduino/requests.md @@ -5,7 +5,7 @@ Because the Arduino SDK was designed to minimize memory footprint, it doesn't pr For example, you could sign up a user from Arduino through a REST call: ```cpp -ParseResponse response = Parse.sendRequest("POST", "/1/users", "{\"username\":\"cooldude6\",\"password\":\"p_n7!-e8\"}", ""); +ParseResponse response = Parse.sendRequest("POST", "/parse/users", "{\"username\":\"cooldude6\",\"password\":\"p_n7!-e8\"}", ""); ``` In this case, the response will contain the objectId of the created user, assuming it was created successfully. diff --git a/_includes/cloudcode/cloud-code.md b/_includes/cloudcode/cloud-code.md index 2a5b0a5a2..7399dc882 100644 --- a/_includes/cloudcode/cloud-code.md +++ b/_includes/cloudcode/cloud-code.md @@ -98,7 +98,7 @@ curl -X POST \ -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \ -H "Content-Type: application/json" \ -d '{ "movie": "The Matrix" }' \ - https://api.parse.com/1/functions/averageStars + https://YOUR.PARSE-SERVER.HERE/parse/functions/averageStars ``` And finally, to call the same function from a JavaScript app: diff --git a/_includes/common/security.md b/_includes/common/security.md index d56a13a56..93997a894 100644 --- a/_includes/common/security.md +++ b/_includes/common/security.md @@ -456,9 +456,9 @@ There are some special classes in Parse that don't follow all of the same securi |Delete|normal behavior [5]|master key only [7]| |Add Field|normal behavior|normal behavior| -1. Logging in, or `/1/login` in the REST API, does not respect the Get CLP on the user class. Login works just based on username and password, and cannot be disabled using CLPs. +1. Logging in, or `/parse/login` in the REST API, does not respect the Get CLP on the user class. Login works just based on username and password, and cannot be disabled using CLPs. -2. Retrieving the current user, or becoming a User based on a session token, which are both `/1/users/me` in the REST API, do not respect the Get CLP on the user class. +2. Retrieving the current user, or becoming a User based on a session token, which are both `/parse/users/me` in the REST API, do not respect the Get CLP on the user class. 3. Read ACLs do not apply to the logged in user. For example, if all users have ACLs with Read disabled, then doing a find query over users will still return the logged in user. However, if the Find CLP is disabled, then trying to perform a find on users will still return an error. diff --git a/_includes/common/server-customize.md b/_includes/common/server-customize.md new file mode 100644 index 000000000..ffa3a030d --- /dev/null +++ b/_includes/common/server-customize.md @@ -0,0 +1,24 @@ +# Your Configuration + + +Customize our docs with your server configuration. + +Protocol:
+
+Domain: + +Mount Path: + +App Id: + +Client Key: + + +- serverUrl: https://YOUR.PARSE-SERVER.HERE/parse/ +- appId: APPLICATION_ID +- clientKey: CLIENT_KEY \ No newline at end of file diff --git a/_includes/embedded_c/cloud-code.md b/_includes/embedded_c/cloud-code.md index 34a4b9f5f..28733ca8c 100644 --- a/_includes/embedded_c/cloud-code.md +++ b/_includes/embedded_c/cloud-code.md @@ -20,5 +20,5 @@ void myCloudFunctionCallback(ParseClient client, int error, int httpStatus, cons // httpResponseBody holds the Cloud Function response } } -parseSendRequest(client, "POST", "/1/functions/hello", "{\"value\":\"echo\"}", myCloudFunctionCallback); +parseSendRequest(client, "POST", "/parse/functions/hello", "{\"value\":\"echo\"}", myCloudFunctionCallback); ``` diff --git a/_includes/embedded_c/requests.md b/_includes/embedded_c/requests.md index 86a865f72..aa6972e4a 100644 --- a/_includes/embedded_c/requests.md +++ b/_includes/embedded_c/requests.md @@ -3,7 +3,7 @@ The main way you'll be interacting with Parse is through the `parseSendRequest` function, which sends a request to the REST API. For example, here's how to save an object with some data: ```cpp -char data[] = "{ \"temperature\": 165 }"; parseSendRequest(client, "POST", "/1/classes/Temperature", data, NULL); +char data[] = "{ \"temperature\": 165 }"; parseSendRequest(client, "POST", "/parse/classes/Temperature", data, NULL); ``` For some requests you will be interested in data returned for the request. In such a case you need to setup a callback and pass it to `parseSendRequest`. @@ -15,7 +15,7 @@ void mySaveCallback(ParseClient client, int error, int httpStatus, const char* h } } -parseSendRequest(client, "GET", "/1/classes/TestObject/gsMHOY3MAx", NULL, myCallback); +parseSendRequest(client, "GET", "/parse/classes/TestObject/gsMHOY3MAx", NULL, myCallback); ``` Using this function, you have full access to the REST API to create objects, delete objects, send analytics events, and more. Take a look at the [REST API Guide]({{ site.baseUrl }}/rest/guide) to find out all the details. diff --git a/_includes/ios/push-notifications.md b/_includes/ios/push-notifications.md index 4ddc613fd..3a744cc4d 100644 --- a/_includes/ios/push-notifications.md +++ b/_includes/ios/push-notifications.md @@ -875,7 +875,7 @@ curl -X GET \ -G \ --data-urlencode 'limit=1000' \ --data-urlencode 'where={ "city": "San Francisco", "deviceType": { "$in": [ "ios", "android", "winphone", "embedded" ] } }' \ -https://api.parse.com/1/installations +https://YOUR.PARSE-SERVER.HERE/parse/installations If you type the above into a console, you should be able to see the first 1,000 objects that match your query. Note that constraints are always ANDed, so if you want to further reduce the search scope, you can add a constraint that matches the specific installation for your device: @@ -888,7 +888,7 @@ curl -X GET \ -G \ --data-urlencode 'limit=1' \ --data-urlencode 'where={ “objectId”: {YOUR_INSTALLATION_OBJECT_ID}, "city": "San Francisco", "deviceType": { "$in": [ "ios", "android", "winphone", "embedded" ] } }' \ -https://api.parse.com/1/installations +https://YOUR.PARSE-SERVER.HERE/parse/installations If the above query returns no results, it is likely that your installation does not meet the targeting criteria for your campaign. diff --git a/_includes/js/users.md b/_includes/js/users.md index 0bb92c368..42afa0ad8 100644 --- a/_includes/js/users.md +++ b/_includes/js/users.md @@ -464,7 +464,7 @@ Parse then verifies that the provided `authData` is valid and checks to see if a

 Status: 200 OK
-Location: https://api.parse.com/1/users/uMz0YZeAqc
+Location: https://YOUR.PARSE-SERVER.HERE/parse/users/uMz0YZeAqc
 
With a response body like: @@ -492,7 +492,7 @@ If the user has never been linked with this account, you will instead receive a

 Status: 201 Created
-Location: https://api.parse.com/1/users/uMz0YZeAqc
+Location: https://YOUR.PARSE-SERVER.HERE/parse/users/uMz0YZeAqc
 
The body of the response will contain the `objectId`, `createdAt`, `sessionToken`, and an automatically-generated unique `username`. For example: diff --git a/_includes/rest/analytics.md b/_includes/rest/analytics.md index 8e8980f45..117ca34f0 100644 --- a/_includes/rest/analytics.md +++ b/_includes/rest/analytics.md @@ -25,20 +25,20 @@ In the example below, the `at` parameter is optional. If omitted, the current se

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
       }' \
-  https://api.parse.com/1/events/AppOpened
+  https://YOUR.PARSE-SERVER.HERE/parse/events/AppOpened
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/events/AppOpened', json.dumps({
+connection.request('POST', '/parse/events/AppOpened', json.dumps({
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -57,7 +57,7 @@ Say your app offers search functionality for apartment listings, and you want to
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -67,20 +67,20 @@ curl -X POST \
           "dayType": "weekday"
         }
       }' \
-  https://api.parse.com/1/events/Search
+  https://YOUR.PARSE-SERVER.HERE/parse/events/Search
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/events/Search', json.dumps({
+connection.request('POST', '/parse/events/Search', json.dumps({
        "dimensions": {
          "priceRange": "1000-1500",
          "source": "craigslist",
          "dayType": "weekday"
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -92,7 +92,7 @@ Parse Analytics can even be used as a lightweight error tracker — simply invok
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -100,18 +100,18 @@ curl -X POST \
           "code": "404"
         }
       }' \
-  https://api.parse.com/1/events/Error
+  https://YOUR.PARSE-SERVER.HERE/parse/events/Error
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/events/Error', json.dumps({
+connection.request('POST', '/parse/events/Error', json.dumps({
        "dimensions": {
          "code": "404"
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -119,4 +119,4 @@ result = json.loads(connection.getresponse().read())
 print result
 
-Note that Parse currently only stores the first eight dimension pairs per call to `/1/events/`. +Note that Parse currently only stores the first eight dimension pairs per call to /parse/events/<eventName>. diff --git a/_includes/rest/cloud-code.md b/_includes/rest/cloud-code.md index 4232d5b3c..843a34318 100644 --- a/_includes/rest/cloud-code.md +++ b/_includes/rest/cloud-code.md @@ -6,19 +6,19 @@ Cloud Functions can be called using the REST API. For example, to call the Cloud

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{}' \
-  https://api.parse.com/1/functions/hello
+  https://YOUR.PARSE-SERVER.HERE/parse/functions/hello
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/functions/hello', json.dumps({
+connection.request('POST', '/parse/functions/hello', json.dumps({
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -36,20 +36,20 @@ Similarly, you can trigger a background job from the REST API. For example, to t
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
   -d '{"plan":"paid"}' \
-  https://api.parse.com/1/jobs/userMigration
+  https://YOUR.PARSE-SERVER.HERE/parse/jobs/userMigration
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/jobs/userMigration', json.dumps({
+connection.request('POST', '/parse/jobs/userMigration', json.dumps({
        "plan": "paid"
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
diff --git a/_includes/rest/config.md b/_includes/rest/config.md
index abf96fc03..ad19ce718 100644
--- a/_includes/rest/config.md
+++ b/_includes/rest/config.md
@@ -8,16 +8,16 @@ After that you will be able to fetch the config on the client by sending a `GET`
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
-  https://api.parse.com/1/config
+  https://YOUR.PARSE-SERVER.HERE/parse/config
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('GET', '/1/config', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/config', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -39,10 +39,10 @@ You can also update the config by sending a `PUT` request to config URL. Here is
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -d "{\"params\":{\"winningNumber\":43}}"
-  https://api.parse.com/1/config
+  https://YOUR.PARSE-SERVER.HERE/parse/config
 

 var request = require('request');
diff --git a/_includes/rest/files.md b/_includes/rest/files.md
index 027d5b83d..bdc956404 100644
--- a/_includes/rest/files.md
+++ b/_includes/rest/files.md
@@ -6,18 +6,18 @@ To upload a file to Parse, send a POST request to the files URL, postfixed with
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: text/plain" \
   -d 'Hello, World!' \
-  https://api.parse.com/1/files/hello.txt
+  https://YOUR.PARSE-SERVER.HERE/parse/files/hello.txt
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/files/hello.txt', 'Hello, World!', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('POST', '/parse/files/hello.txt', 'Hello, World!', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "text/plain"
      })
@@ -45,18 +45,18 @@ To upload an image, the syntax is a little bit different. Here's an example that
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: image/jpeg" \
   --data-binary '@myPicture.jpg' \
-  https://api.parse.com/1/files/pic.jpg
+  https://YOUR.PARSE-SERVER.HERE/parse/files/pic.jpg
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/files/pic.jpg', open('myPicture.jpg', 'rb').read(), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('POST', '/parse/files/pic.jpg', open('myPicture.jpg', 'rb').read(), {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "image/jpeg"
      })
@@ -70,7 +70,7 @@ After files are uploaded, you can associate them with Parse objects:
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -81,13 +81,13 @@ curl -X POST \
           "__type": "File"
         }
       }' \
-  https://api.parse.com/1/classes/PlayerProfile
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/PlayerProfile
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/classes/PlayerProfile', json.dumps({
+connection.request('POST', '/parse/classes/PlayerProfile', json.dumps({
        "name": "Andrew",
        "picture": {
          "name": "...profile.png",
@@ -95,7 +95,7 @@ connection.request('POST', '/1/classes/PlayerProfile', json.dumps({
          "__type": "File"
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -112,16 +112,16 @@ Users holding the master key are allowed to delete files using the REST API. To
 
 

 curl -X DELETE \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
-  https://api.parse.com/1/files/...profile.png
+  https://YOUR.PARSE-SERVER.HERE/parse/files/...profile.png
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('DELETE', '/1/files/...profile.png', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('DELETE', '/parse/files/...profile.png', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}"
      })
 result = json.loads(connection.getresponse().read())
diff --git a/_includes/rest/geopoints.md b/_includes/rest/geopoints.md
index 57963e6cc..be51cf251 100644
--- a/_includes/rest/geopoints.md
+++ b/_includes/rest/geopoints.md
@@ -8,7 +8,7 @@ To associate a point with an object you will need to embed a `GeoPoint` data typ
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -18,20 +18,20 @@ curl -X POST \
           "longitude": -30.0
         }
       }' \
-  https://api.parse.com/1/classes/PlaceObject
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/PlaceObject
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/classes/PlaceObject', json.dumps({
+connection.request('POST', '/parse/classes/PlaceObject', json.dumps({
        "location": {
          "__type": "GeoPoint",
          "latitude": 40.0,
          "longitude": -30.0
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -45,7 +45,7 @@ Now that you have a bunch of objects with spatial coordinates, it would be nice
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'limit=10' \
@@ -58,11 +58,11 @@ curl -X GET \
           }
         }
       }' \
-  https://api.parse.com/1/classes/PlaceObject
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/PlaceObject
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"limit":10,"where":json.dumps({
        "location": {
          "$nearSphere": {
@@ -73,8 +73,8 @@ params = urllib.urlencode({"limit":10,"where":json.dumps({
        }
      })})
 connection.connect()
-connection.request('GET', '/1/classes/PlaceObject?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/PlaceObject?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -114,7 +114,7 @@ To limit the search to a maximum distance add a `$maxDistanceInMiles` (for miles
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'where={
@@ -127,11 +127,11 @@ curl -X GET \
           "$maxDistanceInMiles": 10.0
         }
       }' \
-  https://api.parse.com/1/classes/PlaceObject
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/PlaceObject
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"where":json.dumps({
        "location": {
          "$nearSphere": {
@@ -143,8 +143,8 @@ params = urllib.urlencode({"where":json.dumps({
        }
      })})
 connection.connect()
-connection.request('GET', '/1/classes/PlaceObject?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/PlaceObject?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -155,7 +155,7 @@ It's also possible to query for the set of objects that are contained within a p
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'where={
@@ -176,11 +176,11 @@ curl -X GET \
           }
         }
       }' \
-  https://api.parse.com/1/classes/PizzaPlaceObject
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/PizzaPlaceObject
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"where":json.dumps({
        "location": {
          "$within": {
@@ -200,8 +200,8 @@ params = urllib.urlencode({"where":json.dumps({
        }
      })})
 connection.connect()
-connection.request('GET', '/1/classes/PizzaPlaceObject?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/PizzaPlaceObject?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
diff --git a/_includes/rest/hooks.md b/_includes/rest/hooks.md
index 11c96d5df..a68403764 100644
--- a/_includes/rest/hooks.md
+++ b/_includes/rest/hooks.md
@@ -53,17 +53,17 @@ To fetch the list of all cloud functions you deployed or created, use:
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
-  https://api.parse.com/1/hooks/functions
+  https://YOUR.PARSE-SERVER.HERE/parse/hooks/functions
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('GET', '/1/hooks/functions', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/hooks/functions', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
@@ -87,17 +87,17 @@ To fetch a single cloud function with a given name, use:
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
-  https://api.parse.com/1/hooks/functions/sendMessage
+  https://YOUR.PARSE-SERVER.HERE/parse/hooks/functions/sendMessage
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('GET', '/1/hooks/functions/sendMessage', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/hooks/functions/sendMessage', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
@@ -120,17 +120,17 @@ The output is a json object with one key: "results" whose value is a list of clo
 To fetch the list of all cloud triggers you deployed or created, use:
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
-  https://api.parse.com/1/hooks/triggers
+  https://YOUR.PARSE-SERVER.HERE/parse/hooks/triggers
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('GET', '/1/hooks/triggers', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/hooks/triggers', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
@@ -161,17 +161,17 @@ The output is a json object with one key: "results" whose value is a list of clo
 To fetch a single cloud trigger, use:
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
-  https://api.parse.com/1/hooks/triggers/Scores/beforeSave
+  https://YOUR.PARSE-SERVER.HERE/parse/hooks/triggers/Scores/beforeSave
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('GET', '/1/hooks/triggers/Scores/beforeSave', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/hooks/triggers/Scores/beforeSave', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
@@ -204,29 +204,30 @@ To create cloud code functions or cloud code triggers you can modify your cloud
 and perform a `parse deploy` the usual way.
 
 ## Create function webhook
-To create a new function webhook post to `/1/hooks/functions` with payload in the format
-

+To create a new function webhook post to /parse/hooks/functions with payload in the format
+
+```json
 {"functionName" : x, "url" : y}
-
+``` Post example,

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
   -d '{"functionName":"baz","url":"https://api.example.com/baz"}' \
-  https://api.parse.com/1/hooks/functions
+  https://YOUR.PARSE-SERVER.HERE/parse/hooks/functions
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/hooks/functions', json.dumps(
+connection.request('POST', '/parse/hooks/functions', json.dumps(
        {"functionName":"baz","url":"https://api.example.com/baz"}
      ), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
@@ -246,20 +247,20 @@ If you try to create a function webhook and a cloud code function with the same
 For example,
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
   -d '{"functionName":"bar","url":"https://api.example.com/bar"}' \
-  https://api.parse.com/1/hooks/functions
+  https://YOUR.PARSE-SERVER.HERE/parse/hooks/functions
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/hooks/functions', json.dumps(
+connection.request('POST', '/parse/hooks/functions', json.dumps(
        {"functionName":"bar","url":"https://api.example.com/bar"}
      ), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
@@ -277,7 +278,7 @@ The output may look like this:
 
## Create trigger webhook -To create a new function webhook post to `/1/hooks/triggers` with payload in the format +To create a new function webhook post to /parse/hooks/triggers with payload in the format

 {"className": x, "triggerName": y, "url": z}
 
@@ -288,20 +289,20 @@ To create a new function webhook post to `/1/hooks/triggers` with payload in the Post example,

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
   -d '{"className": "Game", "triggerName": "beforeSave", "url": "https://api.example.com/Game/beforeSave"}' \
-https://api.parse.com/1/hooks/triggers
+https://YOUR.PARSE-SERVER.HERE/parse/hooks/triggers
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/hooks/triggers', json.dumps(
+connection.request('POST', '/parse/hooks/triggers', json.dumps(
        {"className": "Game", "triggerName": "beforeSave", "url": "https://api.example.com/Game/beforeSave"}
      ), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
@@ -325,20 +326,20 @@ If you try to create a trigger webhook and a cloud code trigger with the same na
 For example,
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
   -d '{"className": "Tournament", "triggerName": "beforeDelete", "url": "https://api.example.com/Scores/beforeDelete"}' \
-https://api.parse.com/1/hooks/triggers
+https://YOUR.PARSE-SERVER.HERE/parse/hooks/triggers
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/hooks/triggers', json.dumps(
+connection.request('POST', '/parse/hooks/triggers', json.dumps(
        {"className": "Tournament", "triggerName": "beforeDelete", "url": "https://api.example.com/Scores/beforeDelete"}
      ), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
@@ -362,20 +363,20 @@ To edit the url of a function webhook that was already created use the put metho
 Put example,
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
   -d '{"url":"https://api.example.com/_baz"}' \
-  https://api.parse.com/1/hooks/functions/baz
+  https://YOUR.PARSE-SERVER.HERE/parse/hooks/functions/baz
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/hooks/functions/baz', json.dumps(
+connection.request('PUT', '/parse/hooks/functions/baz', json.dumps(
     {"url":"https://api.example.com/_baz"}
       ), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
@@ -395,20 +396,20 @@ If you try to update a function webhook and a cloud code function with the same
 For example,
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
   -d '{"url":"https://api.example.com/_bar"}' \
-  https://api.parse.com/1/hooks/functions/bar
+  https://YOUR.PARSE-SERVER.HERE/parse/hooks/functions/bar
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/hooks/functions/bar', json.dumps(
+connection.request('PUT', '/parse/hooks/functions/bar', json.dumps(
       {"url":"https://api.example.com/_bar"}
       ), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
@@ -430,20 +431,20 @@ To edit the url of a trigger webhook that was already crated use the put method.
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
   -d '{"url": "https://api.example.com/Game/_beforeSave"}' \
-https://api.parse.com/1/hooks/triggers/Game/beforeSave
+https://YOUR.PARSE-SERVER.HERE/parse/hooks/triggers/Game/beforeSave
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/hooks/triggers/Game/beforeSave', json.dumps(
+connection.request('PUT', '/parse/hooks/triggers/Game/beforeSave', json.dumps(
       {"url": "https://api.example.com/Game/_beforeSave"}
       ), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
@@ -467,20 +468,20 @@ If you try to update a trigger webhook and a cloud code trigger with the same na
 For example,
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
   -d '{"url": "https://api.example.com/Scores/beforeDelete"}' \
-https://api.parse.com/1/hooks/triggers/Tournament/beforeDelete
+https://YOUR.PARSE-SERVER.HERE/parse/hooks/triggers/Tournament/beforeDelete
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/hooks/triggers/Tournament/beforeDelete', json.dumps(
+connection.request('PUT', '/parse/hooks/triggers/Tournament/beforeDelete', json.dumps(
       {"url": "https://api.example.com/Scores/beforeDelete"}
       ), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
@@ -503,20 +504,20 @@ To delete a function webhook use the put method.
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
   -d '{"__op": "Delete"}' \
-https://api.parse.com/1/hooks/functions/foo
+https://YOUR.PARSE-SERVER.HERE/parse/hooks/functions/foo
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/hooks/functions/foo', json.dumps(
+connection.request('PUT', '/parse/hooks/functions/foo', json.dumps(
       {"__op": "Delete"}
       ), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
@@ -534,20 +535,20 @@ Since the overriding webhook was just deleted, this cloud code function will be
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
   -d '{ "__op": "Delete" }' \
-https://api.parse.com/1/hooks/functions/sendMessage
+https://YOUR.PARSE-SERVER.HERE/parse/hooks/functions/sendMessage
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/hooks/functions/sendMessage', json.dumps(
+connection.request('PUT', '/parse/hooks/functions/sendMessage', json.dumps(
       {"__op": "Delete"}
       ), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
@@ -565,20 +566,20 @@ To delete a trigger webhook use the put method.
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
   -d '{ "__op": "Delete" }' \
-https://api.parse.com/1/hooks/triggers/Game/beforeSave
+https://YOUR.PARSE-SERVER.HERE/parse/hooks/triggers/Game/beforeSave
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/hooks/triggers/Game/beforeSave', json.dumps(
+connection.request('PUT', '/parse/hooks/triggers/Game/beforeSave', json.dumps(
       {"__op": "Delete"}
       ), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
@@ -596,20 +597,20 @@ Since the overriding webhook was just deleted, this cloud code trigger will be r
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
   -d '{ "__op": "Delete" }' \
-https://api.parse.com/1/hooks/triggers/Tournament/beforeDelete
+https://YOUR.PARSE-SERVER.HERE/parse/hooks/triggers/Tournament/beforeDelete
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/hooks/triggers/Tournament/beforeDelete', json.dumps(
+connection.request('PUT', '/parse/hooks/triggers/Tournament/beforeDelete', json.dumps(
       {"__op": "Delete"}
       ), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
diff --git a/_includes/rest/objects.md b/_includes/rest/objects.md
index 963d9dcb3..c213dc577 100644
--- a/_includes/rest/objects.md
+++ b/_includes/rest/objects.md
@@ -36,19 +36,19 @@ When you retrieve objects from Parse, some fields are automatically added: `crea
 In the REST API, the class-level operations operate on a resource based on just the class name. For example, if the class name is `GameScore`, the class URL is:
 
 

-https://api.parse.com/1/classes/GameScore
+https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore
 
Users have a special class-level url:

-https://api.parse.com/1/users
+https://YOUR.PARSE-SERVER.HERE/parse/users
 
The operations specific to a single object are available a nested URL. For example, operations specific to the `GameScore` above with `objectId` equal to `Ed1nuqPvcm` would use the object URL:

-https://api.parse.com/1/classes/GameScore/Ed1nuqPvcm
+https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore/Ed1nuqPvcm
 
@@ -58,23 +58,23 @@ To create a new object on Parse, send a POST request to the class URL containing

   curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{"score":1337,"playerName":"Sean Plott","cheatMode":false}' \
-  https://api.parse.com/1/classes/GameScore
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/classes/GameScore', json.dumps({
+connection.request('POST', '/parse/classes/GameScore', json.dumps({
        "score": 1337,
        "playerName": "Sean Plott",
        "cheatMode": False
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -86,7 +86,7 @@ When the creation is successful, the HTTP response is a `201 Created` and the `L
 
 

 Status: 201 Created
-Location: https://api.parse.com/1/classes/GameScore/Ed1nuqPvcm
+Location: https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore/Ed1nuqPvcm
 
The response body is a JSON object containing the `objectId` and the `createdAt` timestamp of the newly-created object: @@ -104,16 +104,16 @@ Once you've created an object, you can retrieve its contents by sending a GET re

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
-  https://api.parse.com/1/classes/GameScore/Ed1nuqPvcm
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore/Ed1nuqPvcm
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('GET', '/1/classes/GameScore/Ed1nuqPvcm', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/GameScore/Ed1nuqPvcm', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -141,19 +141,19 @@ When retrieving objects that have pointers to children, you can fetch child obje
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'include=game' \
-  https://api.parse.com/1/classes/GameScore/Ed1nuqPvcm
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore/Ed1nuqPvcm
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"include":"game"})
 connection.connect()
-connection.request('GET', '/1/classes/GameScore/Ed1nuqPvcm?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/GameScore/Ed1nuqPvcm?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -166,20 +166,20 @@ To change the data on an object that already exists, send a PUT request to the o
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{"score":73453}' \
-  https://api.parse.com/1/classes/GameScore/Ed1nuqPvcm
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore/Ed1nuqPvcm
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/classes/GameScore/Ed1nuqPvcm', json.dumps({
+connection.request('PUT', '/parse/classes/GameScore/Ed1nuqPvcm', json.dumps({
        "score": 73453
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -201,23 +201,23 @@ To help with storing counter-type data, Parse provides the ability to atomically
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{"score":{"__op":"Increment","amount":1}}' \
-  https://api.parse.com/1/classes/GameScore/Ed1nuqPvcm
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore/Ed1nuqPvcm
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/classes/GameScore/Ed1nuqPvcm', json.dumps({
+connection.request('PUT', '/parse/classes/GameScore/Ed1nuqPvcm', json.dumps({
        "score": {
          "__op": "Increment",
          "amount": 1
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -229,23 +229,23 @@ To decrement the counter, use the `Increment` operator with a negative number:
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{"score":{"__op":"Increment","amount":-1}}' \
-  https://api.parse.com/1/classes/GameScore/Ed1nuqPvcm
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore/Ed1nuqPvcm
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/classes/GameScore/Ed1nuqPvcm', json.dumps({
+connection.request('PUT', '/parse/classes/GameScore/Ed1nuqPvcm', json.dumps({
        "score": {
          "__op": "Increment",
          "amount": -1
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -265,17 +265,17 @@ Each method takes an array of objects to add or remove in the "objects" key. For
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{"skills":{"__op":"AddUnique","objects":["flying","kungfu"]}}' \
-  https://api.parse.com/1/classes/GameScore/Ed1nuqPvcm
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore/Ed1nuqPvcm
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/classes/GameScore/Ed1nuqPvcm', json.dumps({
+connection.request('PUT', '/parse/classes/GameScore/Ed1nuqPvcm', json.dumps({
        "skills": {
          "__op": "AddUnique",
          "objects": [
@@ -284,7 +284,7 @@ connection.request('PUT', '/1/classes/GameScore/Ed1nuqPvcm', json.dumps({
          ]
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -298,17 +298,17 @@ print result
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{"opponents":{"__op":"AddRelation","objects":[{"__type":"Pointer","className":"Player","objectId":"Vx4nudeWn"}]}}' \
-  https://api.parse.com/1/classes/GameScore/Ed1nuqPvcm
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore/Ed1nuqPvcm
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/classes/GameScore/Ed1nuqPvcm', json.dumps({
+connection.request('PUT', '/parse/classes/GameScore/Ed1nuqPvcm', json.dumps({
        "opponents": {
          "__op": "AddRelation",
          "objects": [
@@ -320,7 +320,7 @@ connection.request('PUT', '/1/classes/GameScore/Ed1nuqPvcm', json.dumps({
          ]
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -332,17 +332,17 @@ To remove an object from a relation, you can do:
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{"opponents":{"__op":"RemoveRelation","objects":[{"__type":"Pointer","className":"Player","objectId":"Vx4nudeWn"}]}}' \
-  https://api.parse.com/1/classes/GameScore/Ed1nuqPvcm
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore/Ed1nuqPvcm
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/classes/GameScore/Ed1nuqPvcm', json.dumps({
+connection.request('PUT', '/parse/classes/GameScore/Ed1nuqPvcm', json.dumps({
        "opponents": {
          "__op": "RemoveRelation",
          "objects": [
@@ -354,7 +354,7 @@ connection.request('PUT', '/1/classes/GameScore/Ed1nuqPvcm', json.dumps({
          ]
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -368,16 +368,16 @@ To delete an object from the Parse Cloud, send a DELETE request to its object UR
 
 

 curl -X DELETE \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
-  https://api.parse.com/1/classes/GameScore/Ed1nuqPvcm
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore/Ed1nuqPvcm
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('DELETE', '/1/classes/GameScore/Ed1nuqPvcm', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('DELETE', '/parse/classes/GameScore/Ed1nuqPvcm', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -388,22 +388,22 @@ You can delete a single field from an object by using the `Delete` operation:
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{"opponents":{"__op":"Delete"}}' \
-  https://api.parse.com/1/classes/GameScore/Ed1nuqPvcm
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore/Ed1nuqPvcm
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/classes/GameScore/Ed1nuqPvcm', json.dumps({
+connection.request('PUT', '/parse/classes/GameScore/Ed1nuqPvcm', json.dumps({
        "opponents": {
          "__op": "Delete"
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -419,14 +419,14 @@ Each command in a batch has `method`, `path`, and `body` parameters that specify
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
         "requests": [
           {
             "method": "POST",
-            "path": "/1/classes/GameScore",
+            "path": "/parse/classes/GameScore",
             "body": {
               "score": 1337,
               "playerName": "Sean Plott"
@@ -434,7 +434,7 @@ curl -X POST \
           },
           {
             "method": "POST",
-            "path": "/1/classes/GameScore",
+            "path": "/parse/classes/GameScore",
             "body": {
               "score": 1338,
               "playerName": "ZeroCool"
@@ -442,17 +442,17 @@ curl -X POST \
           }
         ]
       }' \
-  https://api.parse.com/1/batch
+  https://YOUR.PARSE-SERVER.HERE/parse/batch
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/batch', json.dumps({
+connection.request('POST', '/parse/batch', json.dumps({
        "requests": [
          {
            "method": "POST",
-           "path": "/1/classes/GameScore",
+           "path": "/parse/classes/GameScore",
            "body": {
              "score": 1337,
              "playerName": "Sean Plott"
@@ -460,7 +460,7 @@ connection.request('POST', '/1/batch', json.dumps({
          },
          {
            "method": "POST",
-           "path": "/1/classes/GameScore",
+           "path": "/parse/classes/GameScore",
            "body": {
              "score": 1338,
              "playerName": "ZeroCool"
@@ -468,7 +468,7 @@ connection.request('POST', '/1/batch', json.dumps({
          }
        ]
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -502,46 +502,46 @@ Other commands that work in a batch are `update` and `delete`.
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
         "requests": [
           {
             "method": "PUT",
-            "path": "/1/classes/GameScore/Ed1nuqPvcm",
+            "path": "/parse/classes/GameScore/Ed1nuqPvcm",
             "body": {
               "score": 999999
             }
           },
           {
             "method": "DELETE",
-            "path": "/1/classes/GameScore/Cpl9lrueY5"
+            "path": "/parse/classes/GameScore/Cpl9lrueY5"
           }
         ]
       }' \
-  https://api.parse.com/1/batch
+  https://YOUR.PARSE-SERVER.HERE/parse/batch
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/batch', json.dumps({
+connection.request('POST', '/parse/batch', json.dumps({
        "requests": [
          {
            "method": "PUT",
-           "path": "/1/classes/GameScore/Ed1nuqPvcm",
+           "path": "/parse/classes/GameScore/Ed1nuqPvcm",
            "body": {
              "score": 999999
            }
          },
          {
            "method": "DELETE",
-           "path": "/1/classes/GameScore/Cpl9lrueY5"
+           "path": "/parse/classes/GameScore/Cpl9lrueY5"
          }
        ]
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -579,15 +579,15 @@ Dates are useful in combination with the built-in `createdAt` and `updatedAt` fi
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'where={"createdAt":{"$gte":{"__type":"Date","iso":"2011-08-21T18:02:52.249Z"}}}' \
-  https://api.parse.com/1/classes/GameScore
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"where":json.dumps({
        "createdAt": {
          "$gte": {
@@ -597,8 +597,8 @@ params = urllib.urlencode({"where":json.dumps({
        }
      })})
 connection.connect()
-connection.request('GET', '/1/classes/GameScore?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/GameScore?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
diff --git a/_includes/rest/push-notifications.md b/_includes/rest/push-notifications.md
index a8d73a8da..a2d3fe869 100644
--- a/_includes/rest/push-notifications.md
+++ b/_includes/rest/push-notifications.md
@@ -30,7 +30,7 @@ Creating an installation object is similar to creating a generic object, but the
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -40,20 +40,20 @@ curl -X POST \
           ""
         ]
       }' \
-  https://api.parse.com/1/installations
+  https://YOUR.PARSE-SERVER.HERE/parse/installations
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/installations', json.dumps({
+connection.request('POST', '/parse/installations', json.dumps({
        "deviceType": "ios",
        "deviceToken": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
        "channels": [
          ""
        ]
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -65,7 +65,7 @@ When the creation is successful, the HTTP response is a `201 Created` and the `L
 
 

 Status: 201 Created
-Location: https://api.parse.com/1/installations/mrmBZvsErB
+Location: https://YOUR.PARSE-SERVER.HERE/parse/installations/mrmBZvsErB
 
The response body is a JSON object containing the `objectId` and the `createdAt` timestamp of the newly-created installation: @@ -88,7 +88,7 @@ You could create and object with these fields using a command like this:

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -100,13 +100,13 @@ curl -X POST \
           ""
         ]
       }' \
-  https://api.parse.com/1/installations
+  https://YOUR.PARSE-SERVER.HERE/parse/installations
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/installations', json.dumps({
+connection.request('POST', '/parse/installations', json.dumps({
        "deviceType": "android",
        "pushType": "gcm",
        "deviceToken": "APA91bFMvbrGg4cp3KUV_7dhU1gmwE_...",
@@ -115,7 +115,7 @@ connection.request('POST', '/1/installations', json.dumps({
          ""
        ]
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -131,16 +131,16 @@ You can retrieve the contents of an installation object by sending a GET request
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
-  https://api.parse.com/1/installations/mrmBZvsErB
+  https://YOUR.PARSE-SERVER.HERE/parse/installations/mrmBZvsErB
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('GET', '/1/installations/mrmBZvsErB', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/installations/mrmBZvsErB', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -168,7 +168,7 @@ Installation objects can be updated by sending a PUT request to the installation
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -179,13 +179,13 @@ curl -X PUT \
           "foo"
         ]
       }' \
-  https://api.parse.com/1/installations/mrmBZvsErB
+  https://YOUR.PARSE-SERVER.HERE/parse/installations/mrmBZvsErB
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/installations/mrmBZvsErB', json.dumps({
+connection.request('PUT', '/parse/installations/mrmBZvsErB', json.dumps({
        "deviceType": "ios",
        "deviceToken": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
        "channels": [
@@ -193,7 +193,7 @@ connection.request('PUT', '/1/installations/mrmBZvsErB', json.dumps({
          "foo"
        ]
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -211,16 +211,16 @@ Without any URL parameters, a GET request simply lists installations:
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
-  https://api.parse.com/1/installations
+  https://YOUR.PARSE-SERVER.HERE/parse/installations
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('GET', '/1/installations', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/installations', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -265,16 +265,16 @@ To delete an installation from the Parse Cloud, send a DELETE request to its URL
 
 

 curl -X DELETE \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
-  https://api.parse.com/1/installations/mrmBZvsErB
+  https://YOUR.PARSE-SERVER.HERE/parse/installations/mrmBZvsErB
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('DELETE', '/1/installations/mrmBZvsErB', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('DELETE', '/parse/installations/mrmBZvsErB', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -299,7 +299,7 @@ Subscribing to a channel via the REST API can be done by updating the `Installat
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -307,18 +307,18 @@ curl -X PUT \
           "Giants"
         ]
       }' \
-  https://api.parse.com/1/installations/mrmBZvsErB
+  https://YOUR.PARSE-SERVER.HERE/parse/installations/mrmBZvsErB
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/installations/mrmBZvsErB', json.dumps({
+connection.request('PUT', '/parse/installations/mrmBZvsErB', json.dumps({
        "channels": [
          "Giants"
        ]
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -338,7 +338,7 @@ With the REST API, the following code can be used to alert all subscribers of th
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -350,13 +350,13 @@ curl -X POST \
           "alert": "The Giants won against the Mets 2-3."
         }
       }' \
-  https://api.parse.com/1/push
+  https://YOUR.PARSE-SERVER.HERE/parse/push
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/push', json.dumps({
+connection.request('POST', '/parse/push', json.dumps({
        "channels": [
          "Giants",
          "Mets"
@@ -365,7 +365,7 @@ connection.request('POST', '/1/push', json.dumps({
          "alert": "The Giants won against the Mets 2-3."
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -385,7 +385,7 @@ Storing arbitrary data on an `Installation` object is done in the same way we st
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -393,18 +393,18 @@ curl -X PUT \
         "gameResults": true,
         "injuryReports": true
       }' \
-  https://api.parse.com/1/installations/mrmBZvsErB
+  https://YOUR.PARSE-SERVER.HERE/parse/installations/mrmBZvsErB
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/installations/mrmBZvsErB', json.dumps({
+connection.request('PUT', '/parse/installations/mrmBZvsErB', json.dumps({
        "scores": True,
        "gameResults": True,
        "injuryReports": True
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -416,7 +416,7 @@ You can even create relationships between your `Installation` objects and other
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -426,20 +426,20 @@ curl -X PUT \
           "objectId": "vmRZXZ1Dvo"
         }
       }' \
-  https://api.parse.com/1/installations/mrmBZvsErB
+  https://YOUR.PARSE-SERVER.HERE/parse/installations/mrmBZvsErB
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/installations/mrmBZvsErB', json.dumps({
+connection.request('PUT', '/parse/installations/mrmBZvsErB', json.dumps({
        "user": {
          "__type": "Pointer",
          "className": "_User",
          "objectId": "vmRZXZ1Dvo"
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -453,7 +453,7 @@ Once you have your data stored on your `Installation` objects, you can use a que
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -464,13 +464,13 @@ curl -X POST \
           "alert": "Willie Hayes injured by own pop fly."
         }
       }' \
-  https://api.parse.com/1/push
+  https://YOUR.PARSE-SERVER.HERE/parse/push
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/push', json.dumps({
+connection.request('POST', '/parse/push', json.dumps({
        "where": {
          "injuryReports": True
        },
@@ -478,7 +478,7 @@ connection.request('POST', '/1/push', json.dumps({
          "alert": "Willie Hayes injured by own pop fly."
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -490,7 +490,7 @@ We can even use channels with our query. To send a push to all subscribers of th
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -502,13 +502,13 @@ curl -X POST \
           "alert": "The Giants scored a run! The score is now 2-2."
         }
       }' \
-  https://api.parse.com/1/push
+  https://YOUR.PARSE-SERVER.HERE/parse/push
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/push', json.dumps({
+connection.request('POST', '/parse/push', json.dumps({
        "where": {
          "channels": "Giants",
          "scores": True
@@ -517,7 +517,7 @@ connection.request('POST', '/1/push', json.dumps({
          "alert": "The Giants scored a run! The score is now 2-2."
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -529,7 +529,7 @@ If we store relationships to other objects in our `Installation` class, we can a
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -551,13 +551,13 @@ curl -X POST \
           "alert": "Free hotdogs at the Parse concession stand!"
         }
       }' \
-  https://api.parse.com/1/push
+  https://YOUR.PARSE-SERVER.HERE/parse/push
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/push', json.dumps({
+connection.request('POST', '/parse/push', json.dumps({
        "where": {
          "user": {
            "$inQuery": {
@@ -576,7 +576,7 @@ connection.request('POST', '/1/push', json.dumps({
          "alert": "Free hotdogs at the Parse concession stand!"
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -606,7 +606,7 @@ For example, to send a notification that increases the current badge number by 1
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -620,13 +620,13 @@ curl -X POST \
           "title": "Mets Score!"
         }
       }' \
-  https://api.parse.com/1/push
+  https://YOUR.PARSE-SERVER.HERE/parse/push
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/push', json.dumps({
+connection.request('POST', '/parse/push', json.dumps({
        "channels": [
          "Mets"
        ],
@@ -637,7 +637,7 @@ connection.request('POST', '/1/push', json.dumps({
          "title": "Mets Score!"
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -651,9 +651,9 @@ It is also possible to specify your own data in this dictionary. As explained in
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/push', json.dumps({
+connection.request('POST', '/parse/push', json.dumps({
        "channels": [
          "Indians"
        ],
@@ -664,7 +664,7 @@ connection.request('POST', '/1/push', json.dumps({
          "newsItem": "Man bites dog"
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -680,7 +680,7 @@ There are two parameters provided by Parse to allow setting an expiration date f
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -689,19 +689,19 @@ curl -X POST \
           "alert": "Season tickets on sale until March 19, 2015"
         }
       }' \
-  https://api.parse.com/1/push
+  https://YOUR.PARSE-SERVER.HERE/parse/push
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/push', json.dumps({
+connection.request('POST', '/parse/push', json.dumps({
        "expiration_time": "2015-03-19T22:05:08Z",
        "data": {
          "alert": "Season tickets on sale until March 19, 2015"
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -713,7 +713,7 @@ Alternatively, you can use the `expiration_interval` parameter to specify a dura
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -723,20 +723,20 @@ curl -X POST \
           "alert": "Season tickets on sale until March 19, 2015"
         }
       }' \
-  https://api.parse.com/1/push
+  https://YOUR.PARSE-SERVER.HERE/parse/push
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/push', json.dumps({
+connection.request('POST', '/parse/push', json.dumps({
        "push_time": "2015-03-13T22:05:08Z",
        "expiration_interval": 518400,
        "data": {
          "alert": "Season tickets on sale until March 19, 2015"
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -751,7 +751,7 @@ The following examples would send a different notification to Android, iOS, and
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -762,13 +762,13 @@ curl -X POST \
           "alert": "Your suitcase has been filled with tiny robots!"
         }
       }' \
-  https://api.parse.com/1/push
+  https://YOUR.PARSE-SERVER.HERE/parse/push
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/push', json.dumps({
+connection.request('POST', '/parse/push', json.dumps({
        "where": {
          "deviceType": "android"
        },
@@ -776,7 +776,7 @@ connection.request('POST', '/1/push', json.dumps({
          "alert": "Your suitcase has been filled with tiny robots!"
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -786,7 +786,7 @@ print result
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -797,13 +797,13 @@ curl -X POST \
           "alert": "Your suitcase has been filled with tiny apples!"
         }
       }' \
-  https://api.parse.com/1/push
+  https://YOUR.PARSE-SERVER.HERE/parse/push
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/push', json.dumps({
+connection.request('POST', '/parse/push', json.dumps({
        "where": {
          "deviceType": "ios"
        },
@@ -811,7 +811,7 @@ connection.request('POST', '/1/push', json.dumps({
          "alert": "Your suitcase has been filled with tiny apples!"
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -821,7 +821,7 @@ print result
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -832,13 +832,13 @@ curl -X POST \
           "alert": "Your suitcase has been filled with tiny glass!"
         }
       }' \
-  https://api.parse.com/1/push
+  https://YOUR.PARSE-SERVER.HERE/parse/push
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/push', json.dumps({
+connection.request('POST', '/parse/push', json.dumps({
        "where": {
          "deviceType": "winrt"
        },
@@ -846,7 +846,7 @@ connection.request('POST', '/1/push', json.dumps({
          "alert": "Your suitcase has been filled with tiny glass!"
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -856,7 +856,7 @@ print result
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -867,13 +867,13 @@ curl -X POST \
           "alert": "Your suitcase is very hip; very metro."
         }
       }' \
-  https://api.parse.com/1/push
+  https://YOUR.PARSE-SERVER.HERE/parse/push
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/push', json.dumps({
+connection.request('POST', '/parse/push', json.dumps({
        "where": {
          "deviceType": "winphone"
        },
@@ -881,7 +881,7 @@ connection.request('POST', '/1/push', json.dumps({
          "alert": "Your suitcase is very hip; very metro."
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -895,7 +895,7 @@ You can schedule a push in advance by specifying a `push_time`. For example, if
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -907,13 +907,13 @@ curl -X POST \
           "alert": "You previously created a reminder for the game today"
         }
       }' \
-  https://api.parse.com/1/push
+  https://YOUR.PARSE-SERVER.HERE/parse/push
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/push', json.dumps({
+connection.request('POST', '/parse/push', json.dumps({
        "where": {
          "user_id": "user_123"
        },
@@ -922,7 +922,7 @@ connection.request('POST', '/1/push', json.dumps({
          "alert": "You previously created a reminder for the game today"
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
diff --git a/_includes/rest/queries.md b/_includes/rest/queries.md
index 5e7757aac..b15af9bb4 100644
--- a/_includes/rest/queries.md
+++ b/_includes/rest/queries.md
@@ -6,16 +6,16 @@ You can retrieve multiple objects at once by sending a GET request to the class
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
-  https://api.parse.com/1/classes/GameScore
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('GET', '/1/classes/GameScore', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/GameScore', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -54,22 +54,22 @@ There are several ways to put constraints on the objects found, using the `where
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'where={"playerName":"Sean Plott","cheatMode":false}' \
-  https://api.parse.com/1/classes/GameScore
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"where":json.dumps({
        "playerName": "Sean Plott",
        "cheatMode": False
      })})
 connection.connect()
-connection.request('GET', '/1/classes/GameScore?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/GameScore?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -97,15 +97,15 @@ For example, to retrieve scores between 1000 and 3000, including the endpoints,
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'where={"score":{"$gte":1000,"$lte":3000}}' \
-  https://api.parse.com/1/classes/GameScore
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"where":json.dumps({
        "score": {
          "$gte": 1000,
@@ -113,8 +113,8 @@ params = urllib.urlencode({"where":json.dumps({
        }
      })})
 connection.connect()
-connection.request('GET', '/1/classes/GameScore?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/GameScore?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -125,15 +125,15 @@ To retrieve scores equal to an odd number below 10, we could issue:
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'where={"score":{"$in":[1,3,5,7,9]}}' \
-  https://api.parse.com/1/classes/GameScore
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"where":json.dumps({
        "score": {
          "$in": [
@@ -146,8 +146,8 @@ params = urllib.urlencode({"where":json.dumps({
        }
      })})
 connection.connect()
-connection.request('GET', '/1/classes/GameScore?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/GameScore?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -158,7 +158,7 @@ To retrieve scores not by a given list of players we could issue:
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'where={
@@ -170,11 +170,11 @@ curl -X GET \
      ]
    }
   }' \
-  https://api.parse.com/1/classes/GameScore
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"where":json.dumps({
        "playerName": {
          "$nin": [
@@ -185,8 +185,8 @@ params = urllib.urlencode({"where":json.dumps({
        }
      })})
 connection.connect()
-connection.request('GET', '/1/classes/GameScore?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/GameScore?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -197,23 +197,23 @@ To retrieve documents with the score set, we could issue:
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'where={"score":{"$exists":true}}' \
-  https://api.parse.com/1/classes/GameScore
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"where":json.dumps({
        "score": {
          "$exists": True
        }
      })})
 connection.connect()
-connection.request('GET', '/1/classes/GameScore?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/GameScore?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -224,23 +224,23 @@ To retrieve documents without the score set, we could issue:
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'where={"score":{"$exists":false}}' \
-  https://api.parse.com/1/classes/GameScore
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"where":json.dumps({
        "score": {
          "$exists": False
        }
      })})
 connection.connect()
-connection.request('GET', '/1/classes/GameScore?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/GameScore?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -251,15 +251,15 @@ If you have a class containing sports teams and you store a user's hometown in t
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'where={"hometown":{"$select":{"query":{"className":"Team","where":{"winPct":{"$gt":0.5}}},"key":"city"}}}' \
-  https://api.parse.com/1/classes/_User
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/_User
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"where":json.dumps({
        "hometown": {
          "$select": {
@@ -276,8 +276,8 @@ params = urllib.urlencode({"where":json.dumps({
        }
      })})
 connection.connect()
-connection.request('GET', '/1/classes/_User?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/_User?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -298,19 +298,19 @@ You can use the `order` parameter to specify a field to sort by. Prefixing with
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'order=score' \
-  https://api.parse.com/1/classes/GameScore
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"order":"score"})
 connection.connect()
-connection.request('GET', '/1/classes/GameScore?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/GameScore?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -321,19 +321,19 @@ And to retrieve scores in descending order:
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'order=-score' \
-  https://api.parse.com/1/classes/GameScore
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"order":"-score"})
 connection.connect()
-connection.request('GET', '/1/classes/GameScore?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/GameScore?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -344,19 +344,19 @@ You can sort by multiple fields by passing `order` a comma-separated list. To re
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'order=score,-name' \
-  https://api.parse.com/1/classes/GameScore
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"order":"score,-name"})
 connection.connect()
-connection.request('GET', '/1/classes/GameScore?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/GameScore?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -367,20 +367,20 @@ You can use the `limit` and `skip` parameters for pagination. `limit` defaults t
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'limit=200' \
   --data-urlencode 'skip=400' \
-  https://api.parse.com/1/classes/GameScore
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"limit":200,"skip":400})
 connection.connect()
-connection.request('GET', '/1/classes/GameScore?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/GameScore?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -391,19 +391,19 @@ You can restrict the fields returned by passing `keys` a comma-separated list. T
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'keys=score,playerName' \
-  https://api.parse.com/1/classes/GameScore
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"keys":"score,playerName"})
 connection.connect()
-connection.request('GET', '/1/classes/GameScore?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/GameScore?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -414,7 +414,7 @@ All of these parameters can be used in combination with each other. For example:
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'where={
@@ -430,11 +430,11 @@ curl -X GET \
   --data-urlencode 'limit=200' \
   --data-urlencode 'skip=400' \
   --data-urlencode 'keys=score,playerName' \
-  https://api.parse.com/1/classes/GameScore
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({
     "where":json.dumps({
       "playerName": {
@@ -450,8 +450,8 @@ params = urllib.urlencode({
     "skip":400,
     "keys":"score,playerName"})
 connection.connect()
-connection.request('GET', '/1/classes/GameScore?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/GameScore?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -465,21 +465,21 @@ For keys with an array type, you can find objects where the key's array value co
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'where={"arrayKey":2}' \
-  https://api.parse.com/1/classes/RandomObject
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/RandomObject
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"where":json.dumps({
        "arrayKey": 2
      })})
 connection.connect()
-connection.request('GET', '/1/classes/RandomObject?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/RandomObject?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -490,15 +490,15 @@ You can also use the `$all` operator to find objects with an array field which c
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'where={"arrayKey":{"$all":[2,3,4]}}' \
-  https://api.parse.com/1/classes/RandomObject
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/RandomObject
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"where":json.dumps({
        "arrayKey": {
          "$all": [
@@ -509,8 +509,8 @@ params = urllib.urlencode({"where":json.dumps({
        }
      })})
 connection.connect()
-connection.request('GET', '/1/classes/RandomObject?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/RandomObject?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -528,24 +528,24 @@ Use the `$regex` operator to restrict to string values that match a regular expr
 

 # Finds barbecue sauces that start with "Big Daddy"
 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'where={"name":{"$regex":"^Big Daddy"}}' \
-  https://api.parse.com/1/classes/BarbecueSauce
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/BarbecueSauce
 

 # Finds barbecue sauces that start with "Big Daddy"
 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"where":json.dumps({
        "name": {
          "$regex": "^Big Daddy"
        }
      })})
 connection.connect()
-connection.request('GET', '/1/classes/BarbecueSauce?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/BarbecueSauce?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -563,15 +563,15 @@ There are several ways to issue queries for relational data. If you want to retr
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'where={"post":{"__type":"Pointer","className":"Post","objectId":"8TOXdXf3tz"}}' \
-  https://api.parse.com/1/classes/Comment
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/Comment
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"where":json.dumps({
        "post": {
          "__type": "Pointer",
@@ -580,8 +580,8 @@ params = urllib.urlencode({"where":json.dumps({
        }
      })})
 connection.connect()
-connection.request('GET', '/1/classes/Comment?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/Comment?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -592,15 +592,15 @@ If you want to retrieve objects where a field contains an object that matches an
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'where={"post":{"$inQuery":{"where":{"image":{"$exists":true}},"className":"Post"}}}' \
-  https://api.parse.com/1/classes/Comment
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/Comment
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"where":json.dumps({
        "post": {
          "$inQuery": {
@@ -614,8 +614,8 @@ params = urllib.urlencode({"where":json.dumps({
        }
      })})
 connection.connect()
-connection.request('GET', '/1/classes/Comment?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/Comment?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -626,15 +626,15 @@ If you want to retrieve objects where a field contains an object that does not m
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'where={"post":{"$notInQuery":{"where":{"image":{"$exists":true}},"className":"Post"}}}' \
-  https://api.parse.com/1/classes/Comment
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/Comment
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"where":json.dumps({
        "post": {
          "$notInQuery": {
@@ -648,8 +648,8 @@ params = urllib.urlencode({"where":json.dumps({
        }
      })})
 connection.connect()
-connection.request('GET', '/1/classes/Comment?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/Comment?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -660,15 +660,15 @@ If you want to retrieve objects that are members of `Relation` field of a parent
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'where={"$relatedTo":{"object":{"__type":"Pointer","className":"Post","objectId":"8TOXdXf3tz"},"key":"likes"}}' \
-  https://api.parse.com/1/users
+  https://YOUR.PARSE-SERVER.HERE/parse/users
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"where":json.dumps({
        "$relatedTo": {
          "object": {
@@ -680,8 +680,8 @@ params = urllib.urlencode({"where":json.dumps({
        }
      })})
 connection.connect()
-connection.request('GET', '/1/users?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/users?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -692,21 +692,21 @@ In some situations, you want to return multiple types of related objects in one
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'order=-createdAt' \
   --data-urlencode 'limit=10' \
   --data-urlencode 'include=post' \
-  https://api.parse.com/1/classes/Comment
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/Comment
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"order":"-createdAt","limit":10,"include":"post"})
 connection.connect()
-connection.request('GET', '/1/classes/Comment?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/Comment?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -740,21 +740,21 @@ You can also do multi level includes using dot notation.  If you wanted to inclu
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'order=-createdAt' \
   --data-urlencode 'limit=10' \
   --data-urlencode 'include=post.author' \
-  https://api.parse.com/1/classes/Comment
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/Comment
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"order":"-createdAt","limit":10,"include":"post.author"})
 connection.connect()
-connection.request('GET', '/1/classes/Comment?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/Comment?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -772,23 +772,23 @@ If you are limiting your query, or if there are a very large number of results,
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'where={"playerName":"Jonathan Walsh"}' \
   --data-urlencode 'count=1' \
   --data-urlencode 'limit=0' \
-  https://api.parse.com/1/classes/GameScore
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/GameScore
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"where":json.dumps({
        "playerName": "Jonathan Walsh"
      }),"count":1,"limit":0})
 connection.connect()
-connection.request('GET', '/1/classes/GameScore?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/GameScore?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -812,15 +812,15 @@ With a nonzero limit, that request would return results as well as the count.
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -G \
   --data-urlencode 'where={"$or":[{"wins":{"$gt":150}},{"wins":{"$lt":5}}]}' \
-  https://api.parse.com/1/classes/Player
+  https://YOUR.PARSE-SERVER.HERE/parse/classes/Player
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"where":json.dumps({
        "$or": [
          {
@@ -836,8 +836,8 @@ params = urllib.urlencode({"where":json.dumps({
        ]
      })})
 connection.connect()
-connection.request('GET', '/1/classes/Player?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/classes/Player?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
diff --git a/_includes/rest/quick-reference.md b/_includes/rest/quick-reference.md
index de852010a..a711f59aa 100644
--- a/_includes/rest/quick-reference.md
+++ b/_includes/rest/quick-reference.md
@@ -1,126 +1,132 @@
 # Quick Reference
 
-All API access is over HTTPS, and accessed via the `https://api.parse.com` domain. The relative path prefix `/1/` indicates that we are currently using version 1 of the API.
+For your convenience you can customize [your configuration](#your-configuration) to change the default server url, mount path and additional values to match your personal setup.
+
+All API access is provided via the domain to your parse server instance. In cases where a domain is used to access the API we will reference `YOUR.PARSE-SERVER.HERE`{: .custom-parse-server-url}, which should be set to your domain in [your configuration](#your-configuration).
+
+The relative path prefix `/parse/` is the default mount path for most installations. If you are using a different mount path be sure to change this to accommodate for your instance. If you are using a hosted service this may be something other than the expected `/parse/`, be sure to check before you proceed. For the following examples we will be using `/parse/`{: .custom-parse-server-mount}, which can be set in [your configuration](#your-configuration).
+
+API access can be provided over **HTTPS** and **HTTP**. We recommend utilizing **HTTPS** for anything other than local development. If you are using a hosted service you will almost certainly be accessing your API exclusively over **HTTPS**.
 
 ## Objects API
 
 | URL                                 | HTTP Verb | Functionality                                      |
 |-------------------------------------|-----------|----------------------------------------------------|
-| `/1/classes/`            | POST      | [Creating Objects](#creating-objects)      |
-| `/1/classes//` | GET       | [Retrieving Objects](#retrieving-objects)  |
-| `/1/classes//` | PUT       | [Updating Objects](#updating-objects)      |
-| `/1/classes/`            | GET       | [Queries](#queries)                                |
-| `/1/classes//` | DELETE    | [Deleting Objects](#deleting-objects)      |
+| /parse/classes/<className>            | POST      | [Creating Objects](#creating-objects)      |
+| /parse/classes/<className>/<objectId> | GET       | [Retrieving Objects](#retrieving-objects)  |
+| /parse/classes/<className>/<objectId> | PUT       | [Updating Objects](#updating-objects)      |
+| /parse/classes/<className>            | GET       | [Queries](#queries)                                |
+| /parse/classes/<className>/<objectId> | DELETE    | [Deleting Objects](#deleting-objects)      |
 {: .docs_table}
 
 ## Users API
 
 | URL                       | HTTP Verb | Functionality                                                      |
 |---------------------------|-----------|--------------------------------------------------------------------|
-| `/1/users`                | POST      | [Signing Up](#signing-up) 
[Linking Users](#linking-users) | -| `/1/login` | GET | [Logging In](#logging-in) | -| `/1/logout` | POST | [Logging Out](#deleting-sessions) | -| `/1/users/` | GET | [Retrieving Users](#retrieving-users) | -| `/1/users/me` | GET | [Validating Session Tokens](#validating-session-tokens--retrieving-current-user)
[Retrieving Current User](#retrieving-users) | -| `/1/users/` | PUT | [Updating Users](#updating-users)
[Linking Users](#linking-users)
[Verifying Emails](#verifying-emails) | -| `/1/users` | GET | [Querying Users](#querying) | -| `/1/users/` | DELETE | [Deleting Users](#deleting-users) | -| `/1/requestPasswordReset` | POST | [Requesting A Password Reset](#requesting-a-password-reset) | +| /parse/users | POST | [Signing Up](#signing-up)
[Linking Users](#linking-users) | +| /parse/login | GET | [Logging In](#logging-in) | +| /parse/logout | POST | [Logging Out](#deleting-sessions) | +| /parse/users/<objectId> | GET | [Retrieving Users](#retrieving-users) | +| /parse/users/me | GET | [Validating Session Tokens](#validating-session-tokens--retrieving-current-user)
[Retrieving Current User](#retrieving-users) | +| /parse/users/<objectId> | PUT | [Updating Users](#updating-users)
[Linking Users](#linking-users)
[Verifying Emails](#verifying-emails) | +| /parse/users | GET | [Querying Users](#querying) | +| /parse/users/<objectId> | DELETE | [Deleting Users](#deleting-users) | +| /parse/requestPasswordReset | POST | [Requesting A Password Reset](#requesting-a-password-reset) | {: .docs_table} ## Sessions API | URL | HTTP Verb |Functionality | |---------------------------|-----------|--------------------------------------------| -| `/1/sessions` | POST | [Creating Restricted Sessions](#creating-sessions) | -| `/1/sessions/` | GET | [Retrieving Sessions](#retrieving-sessions) | -| `/1/sessions/me` | GET | [Retrieving Current Session](#retrieving-sessions) | -| `/1/sessions/` | PUT | [Updating Sessions](#updating-sessions) | -| `/1/sessions` | GET | [Querying Sessions](#querying-sessions) | -| `/1/sessions/` | DELETE | [Deleting Sessions](#deleting-sessions) | -| `/1/sessions/me` | PUT | [Pairing with Installation](#pairing-session-with-installation) | +| /parse/sessions | POST | [Creating Restricted Sessions](#creating-sessions) | +| /parse/sessions/<objectId> | GET | [Retrieving Sessions](#retrieving-sessions) | +| /parse/sessions/me | GET | [Retrieving Current Session](#retrieving-sessions) | +| /parse/sessions/<objectId> | PUT | [Updating Sessions](#updating-sessions) | +| /parse/sessions | GET | [Querying Sessions](#querying-sessions) | +| /parse/sessions/<objectId> | DELETE | [Deleting Sessions](#deleting-sessions) | +| /parse/sessions/me | PUT | [Pairing with Installation](#pairing-session-with-installation) | {: .docs_table} ## Roles API | URL | HTTP Verb | Functionality | |-----------------------|-----------|---------------------------------------------| -| `/1/roles` | POST | [Creating Roles](#creating-roles) | -| `/1/roles/` | GET | [Retrieving Roles](#retrieving-roles) | -| `/1/roles/` | PUT | [Updating Roles](#updating-roles) | -| `/1/roles/` | DELETE | [Deleting Roles](#deleting-roles) | +| /parse/roles | POST | [Creating Roles](#creating-roles) | +| /parse/roles/<objectId> | GET | [Retrieving Roles](#retrieving-roles) | +| /parse/roles/<objectId> | PUT | [Updating Roles](#updating-roles) | +| /parse/roles/<objectId> | DELETE | [Deleting Roles](#deleting-roles) | {: .docs_table} ## Files API | URL | HTTP Verb | Functionality | |-----------------------|-----------|-------------------------------------------| -| `/1/files/` | POST | [Uploading Files](#uploading-files) | +| /parse/files/<fileName> | POST | [Uploading Files](#uploading-files) | {: .docs_table} ## Analytics API | URL | HTTP Verb | Functionality | |-------------------------|-----------|-------------------------------------------------| -| `/1/events/AppOpened` | POST | [Analytics](#app-open-analytics) | -| `/1/events/` | POST | [Custom Analytics](#custom-analytics) | +| /parse/events/AppOpened | POST | [Analytics](#app-open-analytics) | +| /parse/events/<eventName> | POST | [Custom Analytics](#custom-analytics) | {: .docs_table} ## Push Notifications API | URL | HTTP Verb | Functionality | |-----------|-----------|------------------------------| -| `/1/push` | POST | [Push Notifications](#push-notifications) | +| /parse/push | POST | [Push Notifications](#push-notifications) | {: .docs_table} ## Installations API | URL | HTTP Verb | Functionality | |-------------------------------|-----------|----------------------------------------------------------| -| `/1/installations` | POST | [Uploading Installation Data](#uploading-installation-data) | -| `/1/installations/` | GET | [Retrieving Installations](#retrieving-installations) | -| `/1/installations/` | PUT | [Updating Installations](#updating-installations) | -| `/1/installations` | GET | [Querying Installations](#querying-installations) | -| `/1/installations/` | DELETE | [Deleting Installations](#deleting-installations) | +| /parse/installations | POST | [Uploading Installation Data](#uploading-installation-data) | +| /parse/installations/<objectId> | GET | [Retrieving Installations](#retrieving-installations) | +| /parse/installations/<objectId> | PUT | [Updating Installations](#updating-installations) | +| /parse/installations | GET | [Querying Installations](#querying-installations) | +| /parse/installations/<objectId> | DELETE | [Deleting Installations](#deleting-installations) | {: .docs_table} ## Cloud Functions API | URL | HTTP Verb | Functionality | |-----------------------|-----------|-----------------------------------------------------------| -| `/1/functions/` | POST | [Calling Cloud Functions](#calling-cloud-functions) | -| `/1/jobs/` | POST | [Triggering Background Jobs](#triggering-background-jobs) | +| /parse/functions/<name> | POST | [Calling Cloud Functions](#calling-cloud-functions) | +| /parse/jobs/<name> | POST | [Triggering Background Jobs](#triggering-background-jobs) | {: .docs_table} ## Schemas API | URL | HTTP Verb | Functionality | |-------------------------|-----------|-----------------------------------------------------------| -| `/1/schemas/` | GET | [Fetch All Schemas](#fetch-the-schema) | -| `/1/schemas/`| GET | [Fetch Schema](#fetch-the-schema) | -| `/1/schemas/`| POST | [Create Schema](#adding-a-schema) | -| `/1/schemas/`| PUT | [Modify Schema](#modifying-the-schema) | -| `/1/schemas/`| DELETE | [Delete Schema](#removing-a-schema) | +| /parse/schemas/ | GET | [Fetch All Schemas](#fetch-the-schema) | +| /parse/schemas/<className>| GET | [Fetch Schema](#fetch-the-schema) | +| /parse/schemas/<className>| POST | [Create Schema](#adding-a-schema) | +| /parse/schemas/<className>| PUT | [Modify Schema](#modifying-the-schema) | +| /parse/schemas/<className>| DELETE | [Delete Schema](#removing-a-schema) | {: .docs_table} ## Function Hooks API | URL | HTTP Verb | Functionality | |-------------------------------------|-----------|---------------------------------------------------------| -| `/1/hooks/functions/` | GET | [Fetch Cloud Functions](#fetch-functions) | -| `/1/hooks/functions/` | POST | [Create Cloud Function](#create-function-webhook) | -| `/1/hooks/functions/` | PUT | [Edit Cloud Function](#edit-function-webhook) | -| `/1/hooks/functions/` | DELETE | [Delete Cloud Function](#delete-function-webhook) | +| /parse/hooks/functions/<functionName> | GET | [Fetch Cloud Functions](#fetch-functions) | +| /parse/hooks/functions/ | POST | [Create Cloud Function](#create-function-webhook) | +| /parse/hooks/functions/<functionName> | PUT | [Edit Cloud Function](#edit-function-webhook) | +| /parse/hooks/functions/<functionName> | DELETE | [Delete Cloud Function](#delete-function-webhook) | {: .docs_table} ## Trigger Hooks API | URL | HTTP Verb | Functionality | |-----------------------------------------------|-----------|---------------------------------------------------------| -| `/1/hooks/triggers//` | GET | [Fetch Cloud Trigger](#fetch-triggers) | -| `/1/hooks/triggers/` | POST | [Create Cloud Trigger](#create-trigger-webhook) | -| `/1/hooks/triggers//` | PUT | [Edit Cloud Trigger](#edit-trigger-webhook) | -| `/1/hooks/triggers//` | DELETE | [Delete Cloud Trigger](#delete-trigger-webhook) | +| /parse/hooks/triggers/<className>/<triggerName> | GET | [Fetch Cloud Trigger](#fetch-triggers) | +| /parse/hooks/triggers/ | POST | [Create Cloud Trigger](#create-trigger-webhook) | +| /parse/hooks/triggers/<className>/<triggerName> | PUT | [Edit Cloud Trigger](#edit-trigger-webhook) | +| /parse/hooks/triggers/<className>/<triggerName> | DELETE | [Delete Cloud Trigger](#delete-trigger-webhook) | {: .docs_table} ## Request Format @@ -134,7 +140,7 @@ In the examples that follow, the keys for your app are included in the command. You may also authenticate your REST API requests using basic HTTP authentication. For example, to retrieve an object you could set the URL using your Parse credentials in the following format:

-https://myAppID:javascript-key=myJavaScriptKey@api.parse.com/1/classes/GameScore/Ed1nuqPvcm
+https://myAppID:javascript-key=myJavaScriptKey@YOUR.PARSE-SERVER.HERE/parse/classes/GameScore/Ed1nuqPvcm
 
For JavaScript usage, the Parse Cloud supports [cross-origin resource sharing](http://en.wikipedia.org/wiki/Cross-Origin_Resource_Sharing), so that you can use these headers in conjunction with XMLHttpRequest. diff --git a/_includes/rest/roles.md b/_includes/rest/roles.md index 0e7d813a9..852e9b422 100644 --- a/_includes/rest/roles.md +++ b/_includes/rest/roles.md @@ -20,7 +20,7 @@ To create a new role, send a POST request to the roles root:

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -31,13 +31,13 @@ curl -X POST \
           }
         }
       }' \
-  https://api.parse.com/1/roles
+  https://YOUR.PARSE-SERVER.HERE/parse/roles
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/roles', json.dumps({
+connection.request('POST', '/parse/roles', json.dumps({
        "name": "Moderators",
        "ACL": {
          "*": {
@@ -45,7 +45,7 @@ connection.request('POST', '/1/roles', json.dumps({
          }
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -57,7 +57,7 @@ You can create a role with child roles or users by adding existing objects to th
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -88,13 +88,13 @@ curl -X POST \
           ]
         }
       }' \
-  https://api.parse.com/1/roles
+  https://YOUR.PARSE-SERVER.HERE/parse/roles
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/roles', json.dumps({
+connection.request('POST', '/parse/roles', json.dumps({
        "name": "Moderators",
        "ACL": {
          "*": {
@@ -122,7 +122,7 @@ connection.request('POST', '/1/roles', json.dumps({
          ]
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -134,7 +134,7 @@ When the creation is successful, the HTTP response is a `201 Created` and the Lo
 
 

 Status: 201 Created
-Location: https://api.parse.com/1/roles/mrmBZvsErB
+Location: https://YOUR.PARSE-SERVER.HERE/parse/roles/mrmBZvsErB
 
The response body is a JSON object containing the `objectId` and `createdAt` timestamp of the newly-created object: @@ -152,16 +152,16 @@ You can also retrieve the contents of a role object by sending a GET request to

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
-  https://api.parse.com/1/roles/mrmBZvsErB
+  https://YOUR.PARSE-SERVER.HERE/parse/roles/mrmBZvsErB
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('GET', '/1/roles/mrmBZvsErB', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/roles/mrmBZvsErB', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -198,7 +198,7 @@ For example, we can add two users to the "Moderators" role created above like so
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -218,13 +218,13 @@ curl -X PUT \
           ]
         }
       }' \
-  https://api.parse.com/1/roles/mrmBZvsErB
+  https://YOUR.PARSE-SERVER.HERE/parse/roles/mrmBZvsErB
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/roles/mrmBZvsErB', json.dumps({
+connection.request('PUT', '/parse/roles/mrmBZvsErB', json.dumps({
        "users": {
          "__op": "AddRelation",
          "objects": [
@@ -241,7 +241,7 @@ connection.request('PUT', '/1/roles/mrmBZvsErB', json.dumps({
          ]
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
@@ -253,7 +253,7 @@ Similarly, we can remove a child role from the "Moderators" role created above l
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -268,13 +268,13 @@ curl -X PUT \
           ]
         }
       }' \
-  https://api.parse.com/1/roles/mrmBZvsErB
+  https://YOUR.PARSE-SERVER.HERE/parse/roles/mrmBZvsErB
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/roles/mrmBZvsErB', json.dumps({
+connection.request('PUT', '/parse/roles/mrmBZvsErB', json.dumps({
        "roles": {
          "__op": "RemoveRelation",
          "objects": [
@@ -286,7 +286,7 @@ connection.request('PUT', '/1/roles/mrmBZvsErB', json.dumps({
          ]
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
@@ -303,16 +303,16 @@ To delete a role from the Parse Cloud, send a DELETE request to its URL.  For ex
 
 

 curl -X DELETE \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
-  https://api.parse.com/1/roles/mrmBZvsErB
+  https://YOUR.PARSE-SERVER.HERE/parse/roles/mrmBZvsErB
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('DELETE', '/1/roles/mrmBZvsErB', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('DELETE', '/parse/roles/mrmBZvsErB', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -323,17 +323,17 @@ Again, we pass the master key in order to bypass the ACL on the role itself.  Al
 
 

 curl -X DELETE \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "X-Parse-Session-Token: pnktnjyb996sj4p156gjtp4im" \
-  https://api.parse.com/1/roles/mrmBZvsErB
+  https://YOUR.PARSE-SERVER.HERE/parse/roles/mrmBZvsErB
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('DELETE', '/1/roles/mrmBZvsErB', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('DELETE', '/parse/roles/mrmBZvsErB', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "X-Parse-Session-Token": "pnktnjyb996sj4p156gjtp4im"
      })
@@ -373,7 +373,7 @@ These types of relationships are commonly found in applications with user-manage
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
   -d '{
@@ -383,30 +383,30 @@ curl -X PUT \
             {
               "__type": "Pointer",
               "className": "_Role",
-              "objectId": ""
+              "objectId": "<AdministratorsRoleObjectId>"
             }
           ]
         }
       }' \
-  https://api.parse.com/1/roles/
+  https://YOUR.PARSE-SERVER.HERE/parse/roles/<ModeratorsRoleObjectId>
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/roles/', json.dumps({
+connection.request('PUT', '/parse/roles/<ModeratorsRoleObjectId>', json.dumps({
        "roles": {
          "__op": "AddRelation",
          "objects": [
            {
              "__type": "Pointer",
              "className": "_Role",
-             "objectId": ""
+             "objectId": "<AdministratorsRoleObjectId>"
            }
          ]
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
diff --git a/_includes/rest/schemas.md b/_includes/rest/schemas.md
index 9516d755d..3bf219259 100644
--- a/_includes/rest/schemas.md
+++ b/_includes/rest/schemas.md
@@ -17,17 +17,17 @@ as strings in object representation. This is a special case for the Parse API.
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
-  https://api.parse.com/1/schemas
+  https://YOUR.PARSE-SERVER.HERE/parse/schemas
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('GET', '/1/schemas', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/schemas', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
@@ -72,17 +72,17 @@ To fetch schema of a single class, run:
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
-  https://api.parse.com/1/schemas/Game
+  https://YOUR.PARSE-SERVER.HERE/parse/schemas/Game
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('GET', '/1/schemas/Game', "", {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/schemas/Game', "", {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
@@ -97,7 +97,7 @@ fields and some default fields applicable to the class. To add the schema, run:
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
   -d ' 
@@ -109,16 +109,16 @@ curl -X POST \
         }
       }
     }' \
-  https://api.parse.com/1/schemas/City
+  https://YOUR.PARSE-SERVER.HERE/parse/schemas/City
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/schemas/Game', json.dumps({
+connection.request('POST', '/parse/schemas/Game', json.dumps({
        "className":"City","fields":{"name":{"type":"String"} }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
@@ -132,7 +132,7 @@ You can add or delete columns to a schema. To do so, run:
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
   -d '
@@ -144,16 +144,16 @@ curl -X PUT \
         }
       }
     }' \
-  https://api.parse.com/1/schemas/City
+  https://YOUR.PARSE-SERVER.HERE/parse/schemas/City
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/schemas/City', json.dumps(
+connection.request('PUT', '/parse/schemas/City', json.dumps(
        "className":"City","fields":{"population":{"type":"Number"} }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
@@ -165,7 +165,7 @@ To delete a particular field, you need to use `{"__op" : "Delete" }`
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
   -d '
@@ -177,16 +177,16 @@ curl -X PUT \
         }
       }
     }' \
-  https://api.parse.com/1/schemas/City
+  https://YOUR.PARSE-SERVER.HERE/parse/schemas/City
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/schemas/Game', json.dumps(
+connection.request('PUT', '/parse/schemas/Game', json.dumps(
        "className":"City","fields":{"population":{"__op" : "Delete"} }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
@@ -201,17 +201,17 @@ To do that, run:
 
 

 curl -X DELETE\
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-Master-Key: ${MASTER_KEY}" \
   -H "Content-Type: application/json" \
-  https://api.parse.com/1/schemas/City
+  https://YOUR.PARSE-SERVER.HERE/parse/schemas/City
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/schemas/City', "", {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('PUT', '/parse/schemas/City', "", {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-Master-Key": "${MASTER_KEY}",
        "Content-Type": "application/json"
      })
diff --git a/_includes/rest/sessions.md b/_includes/rest/sessions.md
index ae09d6847..abd17c1b2 100644
--- a/_includes/rest/sessions.md
+++ b/_includes/rest/sessions.md
@@ -30,27 +30,27 @@ With revocable sessions, your current session token could become invalid if its
 
 ## Creating Sessions
 
-For mobile apps and websites, you should not create `Session` objects manually. Instead, you should call `GET /1/login` and `POST /1/users` (signup), which will automatically generate a `Session` object in the Parse Cloud. The session token for this automatically-created session will be sent back on the login and signup response. Same for Facebook/Twitter login and signup requests.
+For mobile apps and websites, you should not create `Session` objects manually. Instead, you should call GET /parse/login and POST /parse/users (signup), which will automatically generate a `Session` object in the Parse Cloud. The session token for this automatically-created session will be sent back on the login and signup response. Same for Facebook/Twitter login and signup requests.
 
 In "Parse for IoT" apps (e.g. Arduino or Embedded C), you may want to programmatically create a restricted session that can be transferred to an IoT device. In order to do this, you must first log in normally to obtain an unrestricted session token. Then, you can create a restricted session by providing this unrestricted session token:
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "X-Parse-Session-Token: r:pnktnjyb996sj4p156gjtp4im" \
   -H "Content-Type: application/json" \
   -d '{"customField":"value"}' \
-  https://api.parse.com/1/sessions
+  https://YOUR.PARSE-SERVER.HERE/parse/sessions
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/sessions', json.dumps({
+connection.request('POST', '/parse/sessions', json.dumps({
        "customField": "value"
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "X-Parse-Session-Token": "r:pnktnjyb996sj4p156gjtp4im",
        "Content-Type": "application/json"
@@ -82,17 +82,17 @@ At this point, you can pass the session token `r:aVrtljyb7E8xKo9256gfvp4n2` to a
 If you have the session's objectId, you fetch the `Session` object as long as it belongs to the same user as your current session:
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "X-Parse-Session-Token: r:pnktnjyb996sj4p156gjtp4im" \
-  https://api.parse.com/1/sessions/Axy98kq1B09
+  https://YOUR.PARSE-SERVER.HERE/parse/sessions/Axy98kq1B09
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('GET', '/1/sessions/Axy98kq1B09', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/sessions/Axy98kq1B09', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "X-Parse-Session-Token": "r:pnktnjyb996sj4p156gjtp4im"
      })
@@ -104,17 +104,17 @@ If you only have the session's token (from previous login or session create), yo
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "X-Parse-Session-Token: r:pnktnjyb996sj4p156gjtp4im" \
-  https://api.parse.com/1/sessions/me
+  https://YOUR.PARSE-SERVER.HERE/parse/sessions/me
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('GET', '/1/sessions/me', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/sessions/me', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "X-Parse-Session-Token": "r:pnktnjyb996sj4p156gjtp4im"
      })
@@ -128,19 +128,19 @@ Updating a session is analogous to updating a Parse object.
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "X-Parse-Session-Token: r:pnktnjyb996sj4p156gjtp4im" \
   -H "Content-Type: application/json" \
   -d '{"customField":"value"}' \
-  https://api.parse.com/1/sessions/Axy98kq1B09
+  https://YOUR.PARSE-SERVER.HERE/parse/sessions/Axy98kq1B09
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/logout', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('POST', '/parse/logout', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "X-Parse-Session-Token": "r:pnktnjyb996sj4p156gjtp4im"
      })
@@ -154,17 +154,17 @@ Querying for `Session` objects will only return objects belonging to the same us
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "X-Parse-Session-Token: r:pnktnjyb996sj4p156gjtp4im" \
-  https://api.parse.com/1/sessions
+  https://YOUR.PARSE-SERVER.HERE/parse/sessions
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('GET', '/1/sessions', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/sessions', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "X-Parse-Session-Token": "r:pnktnjyb996sj4p156gjtp4im"
      })
@@ -180,17 +180,17 @@ Deleting the Session object will revoke its session token and cause the user to
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "X-Parse-Session-Token: r:pnktnjyb996sj4p156gjtp4im" \
-  https://api.parse.com/1/logout
+  https://YOUR.PARSE-SERVER.HERE/parse/logout
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/logout', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('POST', '/parse/logout', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "X-Parse-Session-Token": "r:pnktnjyb996sj4p156gjtp4im"
      })
@@ -202,17 +202,17 @@ If you want to delete another `Session` object for your user, and you have its `
 
 

 curl -X DELETE \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "X-Parse-Session-Token: r:pnktnjyb996sj4p156gjtp4im" \
-  https://api.parse.com/1/sessions/Axy98kq1B09
+  https://YOUR.PARSE-SERVER.HERE/parse/sessions/Axy98kq1B09
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('DELETE', '/1/sessions/Axy98kq1B09', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('DELETE', '/parse/sessions/Axy98kq1B09', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "X-Parse-Session-Token": "r:pnktnjyb996sj4p156gjtp4im"
      })
@@ -224,7 +224,7 @@ print result
 
 ## Pairing Session with Installation
 
-For normal user login with the `/1/login` endpoint, the Parse Cloud will set the automatically-created `Session` object's `installationId` to the `X-Parse-Installation-Id` header passed on the login or signup request. Therefore, for these scenarios, you don't need to manually associate the `Session` object with an installation.
+For normal user login with the /parse/login endpoint, the Parse Cloud will set the automatically-created `Session` object's `installationId` to the `X-Parse-Installation-Id` header passed on the login or signup request. Therefore, for these scenarios, you don't need to manually associate the `Session` object with an installation.
 
 The following API is most useful for "Parse for IoT" apps (e.g. Arduino or Embedded C). During IoT device provisioning, the phone typically does not know the `installationId` of the IoT device. The provisioning process typically goes like this:
 
@@ -235,21 +235,21 @@ The following API is most useful for "Parse for IoT" apps (e.g. Arduino or Embed
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
-  -H "X-Parse-Client-Key: ${CLIENT_KEY}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Client-Key: ${CLIENT_KEY}" \
   -H "X-Parse-Session-Token: r:aVrtljyb7E8xKo9256gfvp4n2" \
   -H "X-Parse-Installation-Id: 2d3777a5-f5fc-4caf-80be-73c766235afb" \
   -H "Content-Type: application/json" \
   -d '{}' \
-  https://api.parse.com/1/sessions/me
+  https://YOUR.PARSE-SERVER.HERE/parse/sessions/me
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/sessions/me', json.dumps({
+connection.request('PUT', '/parse/sessions/me', json.dumps({
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "X-Parse-Session-Token": "r:aVrtljyb7E8xKo9256gfvp4n2",
        "Content-Type": "application/json"
@@ -258,13 +258,13 @@ result = json.loads(connection.getresponse().read())
 print result
 
-## `Session` Security +## Session Security `Session` objects can only be accessed by the user specified in the user field. All `Session` objects have an ACL that is read and write by that user only. You cannot change this ACL. This means querying for sessions will only return objects that match the current logged-in user. -When you log in a user via `/1/login`, Parse will automatically create a new unrestricted `Session` object in the Parse Cloud. Same for signups and Facebook/Twitter logins. +When you log in a user via /parse/login, Parse will automatically create a new unrestricted `Session` object in the Parse Cloud. Same for signups and Facebook/Twitter logins. -Session objects manually created from `POST /1/sessions` are always restricted. You cannot manually create an unrestricted sessions using the object creation API. +Session objects manually created from POST /parse/sessions are always restricted. You cannot manually create an unrestricted sessions using the object creation API. Restricted sessions are prohibited from creating, modifying, or deleting any data in the `User`, `Session`, and `Role` classes. Restricted session also cannot read unrestricted sessions. Restricted Sessions are useful for "Parse for IoT" devices (e.g Arduino or Embedded C) that may run in a less-trusted physical environment than mobile apps. However, please keep in mind that restricted sessions can still read data on `User`, `Session`, and `Role` classes, and can read/write data in any other class just like a normal session. So it is still important for IoT devices to be in a safe physical environment and ideally use encrypted storage to store the session token. @@ -280,7 +280,7 @@ Parse.Cloud.beforeSave("MyClass", function(request, response) { }); });
-You can configure Class-Level Permissions (CLPs) for the Session class just like other classes on Parse. CLPs restrict reading/writing of sessions via the `/1/sessions` API, but do not restrict Parse Cloud's automatic session creation/deletion when users log in, sign up, and log out. We recommend that you disable all CLPs not needed by your app. Here are some common use cases for Session CLPs: +You can configure Class-Level Permissions (CLPs) for the Session class just like other classes on Parse. CLPs restrict reading/writing of sessions via the /parse/sessions API, but do not restrict Parse Cloud's automatic session creation/deletion when users log in, sign up, and log out. We recommend that you disable all CLPs not needed by your app. Here are some common use cases for Session CLPs: * **Find**, **Delete** — Useful for building a UI screen that allows users to see their active session on all devices, and log out of sessions on other devices. If your app does not have this feature, you should disable these permissions. * **Create** — Useful for "Parse for IoT" apps (e.g. Arduino or Embedded C) that provision restricted user sessions for other devices from the phone app. You should disable this permission when building apps for mobile and web. For "Parse for IoT" apps, you should check whether your IoT device actually needs to access user-specific data. If not, then your IoT device does not need a user session, and you should disable this permission. diff --git a/_includes/rest/users.md b/_includes/rest/users.md index c811134f5..67239403c 100644 --- a/_includes/rest/users.md +++ b/_includes/rest/users.md @@ -14,23 +14,23 @@ To sign up a new user, send a POST request to the users root. You may add any ad

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "X-Parse-Revocable-Session: 1" \
   -H "Content-Type: application/json" \
   -d '{"username":"cooldude6","password":"p_n7!-e8","phone":"415-392-0202"}' \
-  https://api.parse.com/1/users
+  https://YOUR.PARSE-SERVER.HERE/parse/users
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/users', json.dumps({
+connection.request('POST', '/parse/users', json.dumps({
        "username": "cooldude6",
        "password": "p_n7!-e8",
        "phone": "415-392-0202"
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "X-Parse-Revocable-Session": "1",
        "Content-Type": "application/json"
@@ -43,7 +43,7 @@ When the creation is successful, the HTTP response is a `201 Created` and the `L
 
 

 Status: 201 Created
-Location: https://api.parse.com/1/users/g7y9tkhB7O
+Location: https://YOUR.PARSE-SERVER.HERE/parse/users/g7y9tkhB7O
 
The response body is a JSON object containing the `objectId`, the `createdAt` timestamp of the newly-created object, and the `sessionToken` which can be used to authenticate subsequent requests as this user: @@ -58,25 +58,25 @@ The response body is a JSON object containing the `objectId`, the `createdAt` ti ## Logging In -After you allow users to sign up, you need to let them log in to their account with a username and password in the future. To do this, send a GET request to the `/1/login` endpoint with `username` and `password` as URL-encoded parameters: +After you allow users to sign up, you need to let them log in to their account with a username and password in the future. To do this, send a GET request to the /parse/login endpoint with `username` and `password` as URL-encoded parameters:

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "X-Parse-Revocable-Session: 1" \
   -G \
   --data-urlencode 'username=cooldude6' \
   --data-urlencode 'password=p_n7!-e8' \
-  https://api.parse.com/1/login
+  https://YOUR.PARSE-SERVER.HERE/parse/login
 

 import json,httplib,urllib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 params = urllib.urlencode({"username":"cooldude6","password":"p_n7!-e8"})
 connection.connect()
-connection.request('GET', '/1/login?%s' % params, '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/login?%s' % params, '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "X-Parse-Revocable-Session": "1"
      })
@@ -110,24 +110,24 @@ There are three `emailVerified` states to consider:
 
 ## Requesting A Password Reset
 
-You can initiate password resets for users who have emails associated with their account. To do this, send a POST request to `/1/requestPasswordReset` endpoint with `email` in the body of the request:
+You can initiate password resets for users who have emails associated with their account. To do this, send a POST request to /parse/requestPasswordReset endpoint with `email` in the body of the request:
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "Content-Type: application/json" \
   -d '{"email":"coolguy@iloveapps.com"}' \
-  https://api.parse.com/1/requestPasswordReset
+  https://YOUR.PARSE-SERVER.HERE/parse/requestPasswordReset
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/requestPasswordReset', json.dumps({
+connection.request('POST', '/parse/requestPasswordReset', json.dumps({
        "email": "coolguy@iloveapps.com"
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "Content-Type": "application/json"
      })
@@ -144,16 +144,16 @@ You can also retrieve the contents of a user object by sending a GET request to
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
-  https://api.parse.com/1/users/g7y9tkhB7O
+  https://YOUR.PARSE-SERVER.HERE/parse/users/g7y9tkhB7O
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('GET', '/1/users/g7y9tkhB7O', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/users/g7y9tkhB7O', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -174,21 +174,21 @@ The response body is a JSON object containing all the user-provided fields excep
 
 ## Validating Session Tokens / Retrieving Current User
 
-With a valid session token, you can send a GET request to the `/1/users/me` endpoint to retrieve the user associated with that session token:
+With a valid session token, you can send a GET request to the /parse/users/me endpoint to retrieve the user associated with that session token:
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "X-Parse-Session-Token: r:pnktnjyb996sj4p156gjtp4im" \
-  https://api.parse.com/1/users/me
+  https://YOUR.PARSE-SERVER.HERE/parse/users/me
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('GET', '/1/users/me', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/users/me', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "X-Parse-Session-Token": "r:pnktnjyb996sj4p156gjtp4im"
      })
@@ -215,21 +215,21 @@ For example, if we wanted to change the phone number for `cooldude6`:
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "X-Parse-Session-Token: r:pnktnjyb996sj4p156gjtp4im" \
   -H "Content-Type: application/json" \
   -d '{"phone":"415-369-6201"}' \
-  https://api.parse.com/1/users/g7y9tkhB7O
+  https://YOUR.PARSE-SERVER.HERE/parse/users/g7y9tkhB7O
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/users/g7y9tkhB7O', json.dumps({
+connection.request('PUT', '/parse/users/g7y9tkhB7O', json.dumps({
        "phone": "415-369-6201"
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "X-Parse-Session-Token": "r:pnktnjyb996sj4p156gjtp4im",
        "Content-Type": "application/json"
@@ -252,16 +252,16 @@ You can retrieve multiple users at once by sending a GET request to the root use
 
 

 curl -X GET \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
-  https://api.parse.com/1/users
+  https://YOUR.PARSE-SERVER.HERE/parse/users
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('GET', '/1/users', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('GET', '/parse/users', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}"
      })
 result = json.loads(connection.getresponse().read())
@@ -300,17 +300,17 @@ To delete a user from the Parse Cloud, send a DELETE request to its URL. You mus
 
 

 curl -X DELETE \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "X-Parse-Session-Token: r:pnktnjyb996sj4p156gjtp4im" \
-  https://api.parse.com/1/users/g7y9tkhB7O
+  https://YOUR.PARSE-SERVER.HERE/parse/users/g7y9tkhB7O
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('DELETE', '/1/users/g7y9tkhB7O', '', {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+connection.request('DELETE', '/parse/users/g7y9tkhB7O', '', {
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "X-Parse-Session-Token": "r:pnktnjyb996sj4p156gjtp4im"
      })
@@ -370,7 +370,7 @@ Signing a user up with a linked service and logging them in with that service us
 
 

 curl -X POST \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "X-Parse-Revocable-Session: 1" \
   -H "Content-Type: application/json" \
@@ -386,13 +386,13 @@ curl -X POST \
           }
         }
       }' \
-  https://api.parse.com/1/users
+  https://YOUR.PARSE-SERVER.HERE/parse/users
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('POST', '/1/users', json.dumps({
+connection.request('POST', '/parse/users', json.dumps({
        "authData": {
          "twitter": {
            "id": "12345678",
@@ -404,7 +404,7 @@ connection.request('POST', '/1/users', json.dumps({
          }
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "X-Parse-Revocable-Session": "1",
        "Content-Type": "application/json"
@@ -417,7 +417,7 @@ Parse then verifies that the provided `authData` is valid and checks to see if a
 
 

 Status: 200 OK
-Location: https://api.parse.com/1/users/uMz0YZeAqc
+Location: https://YOUR.PARSE-SERVER.HERE/parse/users/uMz0YZeAqc
 
With a response body like: @@ -446,7 +446,7 @@ If the user has never been linked with this account, you will instead receive a

 Status: 201 Created
-Location: https://api.parse.com/1/users/uMz0YZeAqc
+Location: https://YOUR.PARSE-SERVER.HERE/parse/users/uMz0YZeAqc
 
The body of the response will contain the `objectId`, `createdAt`, `sessionToken`, and an automatically-generated unique `username`. For example: @@ -466,7 +466,7 @@ Linking an existing user with a service like Facebook or Twitter uses a PUT requ

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "X-Parse-Session-Token: r:samplei3l83eerhnln0ecxgy5" \
   -H "Content-Type: application/json" \
@@ -479,13 +479,13 @@ curl -X PUT \
           }
         }
       }' \
-  https://api.parse.com/1/users/uMz0YZeAqc
+  https://YOUR.PARSE-SERVER.HERE/parse/users/uMz0YZeAqc
 

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/users/uMz0YZeAqc', json.dumps({
+connection.request('PUT', '/parse/users/uMz0YZeAqc', json.dumps({
        "authData": {
          "facebook": {
            "id": "123456789",
@@ -494,7 +494,7 @@ connection.request('PUT', '/1/users/uMz0YZeAqc', json.dumps({
          }
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "X-Parse-Session-Token": "r:samplei3l83eerhnln0ecxgy5",
        "Content-Type": "application/json"
@@ -511,7 +511,7 @@ Unlinking an existing user with a service also uses a PUT request to clear `auth
 
 

 curl -X PUT \
-  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
+  -H "X-Parse-Application-Id: ${APPLICATION_ID}" \
   -H "X-Parse-REST-API-Key: ${REST_API_KEY}" \
   -H "X-Parse-Session-Token: r:samplei3l83eerhnln0ecxgy5" \
   -H "Content-Type: application/json" \
@@ -520,18 +520,18 @@ curl -X PUT \
           "facebook": null
         }
       }' \
-  https://api.parse.com/1/users/uMz0YZeAqc
+  https://YOUR.PARSE-SERVER.HERE/parse/users/uMz0YZeAqc
 
-

+

 import json,httplib
-connection = httplib.HTTPSConnection('api.parse.com', 443)
+connection = httplib.HTTPSConnection('YOUR.PARSE-SERVER.HERE', 443)
 connection.connect()
-connection.request('PUT', '/1/users/uMz0YZeAqc', json.dumps({
+connection.request('PUT', '/parse/users/uMz0YZeAqc', json.dumps({
        "authData": {
          "facebook": null
        }
      }), {
-       "X-Parse-Application-Id": "${APPLICATION_ID}",
+       "X-Parse-Application-Id": "${APPLICATION_ID}",
        "X-Parse-REST-API-Key": "${REST_API_KEY}",
        "X-Parse-Session-Token": "r:samplei3l83eerhnln0ecxgy5",
        "Content-Type": "application/json"
diff --git a/assets/js/bundle.js b/assets/js/bundle.js
index 1565a8eaa..5922886cf 100644
--- a/assets/js/bundle.js
+++ b/assets/js/bundle.js
@@ -46,29 +46,29 @@
 /************************************************************************/
 /******/ ([
 /* 0 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	/* WEBPACK VAR INJECTION */(function(_, $) {'use strict';
 
 	// Sticky TOC
 	(function () {
-			window.onscroll = window.onresize = function () {
-					var scrollPos = window.pageYOffset || document.documentElement.scrollTop;
-					var windowWidth = window.innerWidth || document.body.clientWidth;
-					var toc = document.getElementById('toc');
-					if (scrollPos > 250) {
-							if (windowWidth > 1104) {
-									toc.style.position = 'fixed';
-									toc.style.left = document.getElementById('getting-started').getBoundingClientRect().left - 230 + 'px';
-							} else if (windowWidth > 760) {
-									toc.style.position = 'fixed';
-									toc.style.left = document.getElementById('getting-started').getBoundingClientRect().left - 210 + 'px';
-							}
-					} else {
-							toc.style.position = 'absolute';
-							toc.style.left = '0';
-					}
-			};
+	  window.onscroll = window.onresize = function () {
+	    var scrollPos = window.pageYOffset || document.documentElement.scrollTop;
+	    var windowWidth = window.innerWidth || document.body.clientWidth;
+	    var toc = document.getElementById('toc');
+	    if (scrollPos > 250) {
+	      if (windowWidth > 1104) {
+	        toc.style.position = 'fixed';
+	        toc.style.left = document.getElementById('getting-started').getBoundingClientRect().left - 230 + 'px';
+	      } else if (windowWidth > 760) {
+	        toc.style.position = 'fixed';
+	        toc.style.left = document.getElementById('getting-started').getBoundingClientRect().left - 210 + 'px';
+	      }
+	    } else {
+	      toc.style.position = 'absolute';
+	      toc.style.left = '0';
+	    }
+	  };
 	})();
 
 	// application.js
@@ -84,735 +84,837 @@
 	// core.js
 	(function () {
 
-			var svgNamespace = 'http://www.w3.org/2000/svg';
-
-			// Wrapped to provide tag vs svgTag methods
-			var createElement = function createElement(name, attr, children, svg) {
-					var tag;
-					if (svg) {
-							tag = document.createElementNS(svgNamespace, name);
-					} else {
-							tag = document.createElement(name);
-					}
-					// We apply attributes after children so that we can set the value of
-					// a select tag at render time
-					if (children) {
-							if (!Array.isArray(children)) {
-									children = [children];
-							}
-							for (var i = 0; i < children.length; i++) {
-									var node = children[i];
-									if (typeof node === 'string' || typeof node === 'number') {
-											node = document.createTextNode(node);
-									}
-									if (node) {
-											// Allow falsy entries to be ignored
-											tag.appendChild(node);
-									}
-							}
-					}
-					if (attr) {
-							for (var a in attr) {
-									if (a === 'style') {
-											for (var s in attr[a]) {
-													tag.style[s] = attr[a][s];
-											}
-									} else if (a.indexOf('data-') === 0 || svg) {
-											tag.setAttribute(a, attr[a]);
-									} else {
-											tag[a] = attr[a];
-									}
-							}
-					}
-					return tag;
-			};
-
-			var UI = window.UI = {
-					// DOM construction methods
-					tag: function tag(name, attr, children) {
-							return createElement(name, attr, children, false);
-					},
-
-					svgTag: function svgTag(name, attr, children) {
-							return createElement(name, attr, children, true);
-					},
-
-					createIcon: function createIcon(icon) {
-							var i = document.createElement('i');
-							i.className = 'icon_' + icon;
-							return i;
-					},
-
-					createTooltip: function createTooltip(text, options) {
-							var className = 'tooltip_wrap';
-							switch (options.direction) {
-									case 'left':
-											className += ' to_left';
-											break;
-									case 'top-left':
-											className += ' to_top_left';
-											break;
-									case 'top-right':
-											className += ' to_top_right';
-											break;
-							}
-							return UI.tag('span', { className: className }, [UI.tag('span', { className: 'tip' }, text)]);
-					},
-
-					// DOM property methods
-					hasAncestor: function hasAncestor(node, ancestor) {
-							var cur = node.parentNode;
-							while (cur) {
-									if (cur === ancestor) {
-											return true;
-									}
-									cur = cur.parentNode;
-							}
-							return false;
-					},
-
-					addClass: function addClass(node, className) {
-							var re = new RegExp('\\b' + className + '\\b');
-							if (!node.className.match(re)) {
-									node.className += ' ' + className;
-							}
-					},
-
-					removeClass: function removeClass(node, className) {
-							var re = new RegExp('\\s*\\b' + className + '\\b', 'g');
-							node.className = node.className.replace(re, '');
-					},
-
-					toggleClass: function toggleClass(node, className, add) {
-							if (add === undefined) {
-									add = !UI.hasClass(node, className);
-							}
-
-							if (add) {
-									UI.addClass(node, className);
-							} else {
-									UI.removeClass(node, className);
-							}
-					},
-
-					hasClass: function hasClass(node, className) {
-							var re = new RegExp('\\b' + className + '\\b');
-							return !!node.className.match(re);
-					},
+	  var svgNamespace = 'http://www.w3.org/2000/svg';
 
-					getStyle: function getStyle(node, prop) {
-							if (node.currentStyle) return node.currentStyle[styleProp];
-							if (window.getComputedStyle) return document.defaultView.getComputedStyle(node, null).getPropertyValue(prop);
-							return '';
-					},
-
-					documentPosition: function documentPosition(node) {
-							var pos = { x: 0, y: 0 };
-							var cur = node;
-							while (cur) {
-									pos.x += cur.offsetLeft;
-									pos.y += cur.offsetTop;
-									cur = cur.offsetParent;
-							}
-							return pos;
-					},
+	  // Wrapped to provide tag vs svgTag methods
+	  var createElement = function createElement(name, attr, children, svg) {
+	    var tag;
+	    if (svg) {
+	      tag = document.createElementNS(svgNamespace, name);
+	    } else {
+	      tag = document.createElement(name);
+	    }
+	    // We apply attributes after children so that we can set the value of
+	    // a select tag at render time
+	    if (children) {
+	      if (!Array.isArray(children)) {
+	        children = [children];
+	      }
+	      for (var i = 0; i < children.length; i++) {
+	        var node = children[i];
+	        if (typeof node === 'string' || typeof node === 'number') {
+	          node = document.createTextNode(node);
+	        }
+	        if (node) {
+	          // Allow falsy entries to be ignored
+	          tag.appendChild(node);
+	        }
+	      }
+	    }
+	    if (attr) {
+	      for (var a in attr) {
+	        if (a === 'style') {
+	          for (var s in attr[a]) {
+	            tag.style[s] = attr[a][s];
+	          }
+	        } else if (a.indexOf('data-') === 0 || svg) {
+	          tag.setAttribute(a, attr[a]);
+	        } else {
+	          tag[a] = attr[a];
+	        }
+	      }
+	    }
+	    return tag;
+	  };
 
-					windowPosition: function windowPosition(node) {
-							var pos = UI.documentPosition(node);
-							pos.x -= window.scrollX;
-							pos.y -= window.scrollY;
-							return pos;
-					},
+	  var UI = window.UI = {
+	    // DOM construction methods
+	    tag: function tag(name, attr, children) {
+	      return createElement(name, attr, children, false);
+	    },
+
+	    svgTag: function svgTag(name, attr, children) {
+	      return createElement(name, attr, children, true);
+	    },
+
+	    createIcon: function createIcon(icon) {
+	      var i = document.createElement('i');
+	      i.className = 'icon_' + icon;
+	      return i;
+	    },
+
+	    createTooltip: function createTooltip(text, options) {
+	      var className = 'tooltip_wrap';
+	      switch (options.direction) {
+	        case 'left':
+	          className += ' to_left';
+	          break;
+	        case 'top-left':
+	          className += ' to_top_left';
+	          break;
+	        case 'top-right':
+	          className += ' to_top_right';
+	          break;
+	      }
+	      return UI.tag('span', { className: className }, [UI.tag('span', { className: 'tip' }, text)]);
+	    },
+
+	    // DOM property methods
+	    hasAncestor: function hasAncestor(node, ancestor) {
+	      var cur = node.parentNode;
+	      while (cur) {
+	        if (cur === ancestor) {
+	          return true;
+	        }
+	        cur = cur.parentNode;
+	      }
+	      return false;
+	    },
 
-					// DOM event methods
-					delegate: function delegate(event, parent, selector, cb) {
-							if (event === 'focus' || event === 'blur') {
-									// Focus and blur don't bubble
-									throw 'Focus and blur delegation are not yet supported';
-							}
-							var matches = function matches() {
-									return false;
-							};
-							if (typeof selector === 'string') {
-									selector = selector.toUpperCase();
-									matches = function matches(el) {
-											return el.tagName === selector;
-									};
-							} else {
-									if (selector.className) {
-											var re = new RegExp('\\b' + selector.className + '\\b');
-											matches = function matches(el) {
-													return el.className.match(re);
-											};
-									} else if (selector.id) {
-											matches = function matches(el) {
-													return el.id === selector.id;
-											};
-									}
-							}
-							parent.addEventListener(event, function (e) {
-									var node = e.target;
-									while (node && node !== document) {
-											if (matches(node)) {
-													cb.call(node, e);
-											}
-											node = node.parentNode;
-									}
-							});
-					},
+	    addClass: function addClass(node, className) {
+	      var re = new RegExp('\\b' + className + '\\b');
+	      if (!node.className.match(re)) {
+	        node.className += ' ' + className;
+	      }
+	    },
 
-					// formatting methods
-					prettyNumber: function prettyNumber(num) {
-							var pre;
-							var places = Math.ceil(Math.log(Math.abs(num) + 1) / Math.LN10);
-							if (places > 6 && places < 10) {
-									pre = num / 1e6;
-									if ((pre | 0) === pre || Math.round(num % 1e6 / 1e5) === 0) {
-											return (pre | 0) + 'M';
-									} else {
-											return (pre | 0) + '.' + Math.round(num % 1e6 / 1e5) + 'M';
-									}
-							} else if (places > 5) {
-									pre = num / 1000;
-									if ((pre | 0) === pre || Math.round(num % 1000 / 100) === 0) {
-											return (pre | 0) + 'K';
-									} else {
-											return (pre | 0) + '.' + Math.round(num % 1000 / 100) + 'K';
-									}
-							} else if (places > 3) {
-									var post = num % 1000 | 0;
-									if (post < 10) {
-											post = '00' + post;
-									} else if (post < 100) {
-											post = '0' + post;
-									}
-									return (num / 1000 | 0) + ',' + post;
-							} else {
-									return (num | 0) + '';
-							}
-					},
+	    removeClass: function removeClass(node, className) {
+	      var re = new RegExp('\\s*\\b' + className + '\\b', 'g');
+	      node.className = node.className.replace(re, '');
+	    },
 
-					// animation methods
-					Animate: {
-							// The show and hide functions require a "transition: 'opacity' delay"
-							// CSS class to be present on the element
-							show: function show(el, delay) {
-									if (delay === 'undefined') {
-											delay = 0;
-									}
-									el.style.display = 'block';
-									el.style.opacity = 0;
-									setTimeout(function () {
-											el.style.opacity = 1;
-									}, delay);
-							},
-
-							hide: function hide(el, delay) {
-									if (window.getComputedStyle(el).opacity > 0) {
-											if (typeof delay === 'undefined') {
-													delay = 500;
-											}
-											el.style.opacity = 0;
-											setTimeout(function () {
-													el.style.display = 'none';
-											}, delay);
-									}
-							}
-					},
+	    toggleClass: function toggleClass(node, className, add) {
+	      if (add === undefined) {
+	        add = !UI.hasClass(node, className);
+	      }
 
-					// Methods inherited by components
-					ComponentProto: {
-							attach: function attach(parent) {
-									if (this.node) {
-											parent.appendChild(this.node);
-											return this;
-									}
-									return null;
-							},
+	      if (add) {
+	        UI.addClass(node, className);
+	      } else {
+	        UI.removeClass(node, className);
+	      }
+	    },
+
+	    hasClass: function hasClass(node, className) {
+	      var re = new RegExp('\\b' + className + '\\b');
+	      return !!node.className.match(re);
+	    },
+
+	    getStyle: function getStyle(node, prop) {
+	      if (node.currentStyle) return node.currentStyle[styleProp];
+	      if (window.getComputedStyle) return document.defaultView.getComputedStyle(node, null).getPropertyValue(prop);
+	      return '';
+	    },
+
+	    documentPosition: function documentPosition(node) {
+	      var pos = { x: 0, y: 0 };
+	      var cur = node;
+	      while (cur) {
+	        pos.x += cur.offsetLeft;
+	        pos.y += cur.offsetTop;
+	        cur = cur.offsetParent;
+	      }
+	      return pos;
+	    },
+
+	    windowPosition: function windowPosition(node) {
+	      var pos = UI.documentPosition(node);
+	      pos.x -= window.scrollX;
+	      pos.y -= window.scrollY;
+	      return pos;
+	    },
+
+	    // DOM event methods
+	    delegate: function delegate(event, parent, selector, cb) {
+	      if (event === 'focus' || event === 'blur') {
+	        // Focus and blur don't bubble
+	        throw 'Focus and blur delegation are not yet supported';
+	      }
+	      var matches = function matches() {
+	        return false;
+	      };
+	      if (typeof selector === 'string') {
+	        selector = selector.toUpperCase();
+	        matches = function matches(el) {
+	          return el.tagName === selector;
+	        };
+	      } else {
+	        if (selector.className) {
+	          var re = new RegExp('\\b' + selector.className + '\\b');
+	          matches = function matches(el) {
+	            return el.className.match(re);
+	          };
+	        } else if (selector.id) {
+	          matches = function matches(el) {
+	            return el.id === selector.id;
+	          };
+	        }
+	      }
+	      parent.addEventListener(event, function (e) {
+	        var node = e.target;
+	        while (node && node !== document) {
+	          if (matches(node)) {
+	            cb.call(node, e);
+	          }
+	          node = node.parentNode;
+	        }
+	      });
+	    },
+
+	    // formatting methods
+	    prettyNumber: function prettyNumber(num) {
+	      var pre;
+	      var places = Math.ceil(Math.log(Math.abs(num) + 1) / Math.LN10);
+	      if (places > 6 && places < 10) {
+	        pre = num / 1e6;
+	        if ((pre | 0) === pre || Math.round(num % 1e6 / 1e5) === 0) {
+	          return (pre | 0) + 'M';
+	        } else {
+	          return (pre | 0) + '.' + Math.round(num % 1e6 / 1e5) + 'M';
+	        }
+	      } else if (places > 5) {
+	        pre = num / 1000;
+	        if ((pre | 0) === pre || Math.round(num % 1000 / 100) === 0) {
+	          return (pre | 0) + 'K';
+	        } else {
+	          return (pre | 0) + '.' + Math.round(num % 1000 / 100) + 'K';
+	        }
+	      } else if (places > 3) {
+	        var post = num % 1000 | 0;
+	        if (post < 10) {
+	          post = '00' + post;
+	        } else if (post < 100) {
+	          post = '0' + post;
+	        }
+	        return (num / 1000 | 0) + ',' + post;
+	      } else {
+	        return (num | 0) + '';
+	      }
+	    },
+
+	    // animation methods
+	    Animate: {
+	      // The show and hide functions require a "transition: 'opacity' delay"
+	      // CSS class to be present on the element
+	      show: function show(el, delay) {
+	        if (delay === 'undefined') {
+	          delay = 0;
+	        }
+	        el.style.display = 'block';
+	        el.style.opacity = 0;
+	        setTimeout(function () {
+	          el.style.opacity = 1;
+	        }, delay);
+	      },
+
+	      hide: function hide(el, delay) {
+	        if (window.getComputedStyle(el).opacity > 0) {
+	          if (typeof delay === 'undefined') {
+	            delay = 500;
+	          }
+	          el.style.opacity = 0;
+	          setTimeout(function () {
+	            el.style.display = 'none';
+	          }, delay);
+	        }
+	      }
+	    },
+
+	    // Methods inherited by components
+	    ComponentProto: {
+	      attach: function attach(parent) {
+	        if (this.node) {
+	          parent.appendChild(this.node);
+	          return this;
+	        }
+	        return null;
+	      },
 
-							remove: function remove() {
-									if (this.node && this.node.parentNode) {
-											this.node.parentNode.removeChild(this.node);
-											return this;
-									}
-									return null;
-							}
-					}
-			};
+	      remove: function remove() {
+	        if (this.node && this.node.parentNode) {
+	          this.node.parentNode.removeChild(this.node);
+	          return this;
+	        }
+	        return null;
+	      }
+	    }
+	  };
 	})();
 
 	// live_toc.js
 	(function (UI, _) {
-			if (!UI) {
-					return;
-			}
-
-			var LiveTOC = UI.LiveTOC = function (options) {
-					this.parent = options.parent;
-					this.content = options.content;
-					this.scrollContent = options.scrollContent || options.content;
-
-					this.throttleInterval = options.throttleInterval || 300;
-					this.alignment = options.alignment || 'center';
-					this.onSelect = options.onSelect || null;
-
-					this.currentItem = null;
-					this._headerHeights = {};
-					this._sortedHeights = [];
-
-					this.render();
-					if (options.parent) {
-							this.attach(options.parent);
-					}
-					this.initializeEventHandlers();
-			};
-
-			LiveTOC.prototype = {
-					initializeEventHandlers: function initializeEventHandlers() {
-							var throttled = _.throttle(this.handleScroll.bind(this), this.throttleInterval);
-
-							if (this.scrollContent === document.getElementsByTagName('body')[0]) {
-									document.addEventListener('scroll', throttled);
-							} else {
-									this.scrollContent.addEventListener('scroll', throttled);
-							}
-					},
-
-					render: function render() {
-							// we really need this to calculate header heights
-							this.scrollContent.style.position = "relative";
+	  if (!UI) {
+	    return;
+	  }
 
-							// build a mapping of the table of content based on the
-							// h1s and h2s in the content
-							var toc = this.buildTOC();
+	  var LiveTOC = UI.LiveTOC = function (options) {
+	    this.parent = options.parent;
+	    this.content = options.content;
+	    this.scrollContent = options.scrollContent || options.content;
 
-							// add toc data
-							this.node = UI.tag('ul', { className: 'ui_live_toc' }, toc);
+	    this.throttleInterval = options.throttleInterval || 300;
+	    this.alignment = options.alignment || 'center';
+	    this.onSelect = options.onSelect || null;
 
-							// calculate the cached heights of each header in the text
-							$(document).ready(function (e) {
-									this.updateHeights();
-							}.bind(this));
-					},
+	    this.currentItem = null;
+	    this._headerHeights = {};
+	    this._sortedHeights = [];
 
-					// find all the h1s and h2s in the content and build the TOC elements
-					buildTOC: function buildTOC() {
-							var headers = this.content.querySelectorAll('h1, h2, h3');
-							var toc = [];
-							var latestMajor, latestMinor;
-
-							for (var i = 0; i < headers.length; i++) {
-									var el = headers[i];
-									var text = $(el).text();
-									// var anchor = el.getElementsByTagName('a')[0];
-									// if (anchor === undefined) {
-									// 	continue;
-									// }
-									// var name = anchor.name;
-									var name = el.id;
-
-									// Build main table of contents list from h1 tags
-									if (el.tagName === 'H1') {
-											latestMajor = UI.tag('ul', { className: 'ui_live_toc_major_list' });
-											latestMajor.name = name;
-											toc.push(UI.tag('li', { 'data-name': name, className: 'ui_live_toc_main' }, [UI.tag('a', { href: '#' + name }, text), latestMajor]));
-											latestMinor = undefined;
-
-											// Build collapsable sublist with h2 tags. We skip any H2s
-											// that appear before the first H1.
-									} else if (el.tagName === 'H2' && latestMajor !== undefined) {
-											latestMinor = UI.tag('ul', { className: 'ui_live_toc_minor_list' });
-											latestMinor.name = name;
-											latestMajor.appendChild(UI.tag('li', { 'data-name': name, className: 'ui_live_toc_major' }, [UI.tag('a', { href: '#' + name }, text), latestMinor]));
-
-											// Build deeper collapsable sublist with h3 tags. We skip any
-											// H3s that appear before the first H1 or directly after any H1
-									} else if (el.tagName === 'H3' && latestMajor !== undefined && latestMinor !== undefined) {
-											latestMinor.appendChild(UI.tag('li', { 'data-name': name, className: 'ui_live_toc_minor' }, [UI.tag('a', { href: '#' + name }, text.toLowerCase())]));
-									}
-							}
-							return toc;
-					},
+	    this.render();
+	    if (options.parent) {
+	      this.attach(options.parent);
+	    }
+	    this.initializeEventHandlers();
+	  };
 
-					// Update the internal tracking of header heights. Should be called when
-					// the content changes in a way that will affect the height of headers
-					updateHeights: function updateHeights() {
-							var headerHeights = {};
-							var sortedHeights = [];
-							var headers = this.content.querySelectorAll('h1, h2, h3');
-							var latestMajor, latestMinor;
-							for (var i = 0; i < headers.length; i++) {
-									// var anchor = headers[i].getElementsByTagName('a')[0];
-									// var name = anchor.name;
-									var el = headers[i];
-									var name = el.id;
-									var shouldAdd = false;
-									if (el.tagName === 'H1') {
-										latestMajor = el;
-										latestMinor = undefined;
-										shouldAdd = true;
-									} else if (el.tagName === 'H2' && latestMajor !== undefined) {
-										latestMinor = el;
-										shouldAdd = true;
-									} else if (el.tagName === 'H3' && latestMajor !== undefined && latestMinor !== undefined) {
-										shouldAdd = true;
-									}
-									if (shouldAdd) {
-										headerHeights[headers[i].offsetTop] = name;
-										sortedHeights.push(headers[i].offsetTop);
-									}
-							}
-							this._headerHeights = headerHeights;
-							this._sortedHeights = sortedHeights.sort(function (a, b) {
-									return a - b;
-							});
-					},
+	  LiveTOC.prototype = {
+	    initializeEventHandlers: function initializeEventHandlers() {
+	      var throttled = _.throttle(this.handleScroll.bind(this), this.throttleInterval);
 
-					// find out what item to highlight in the TOC and what section
-					// to collapse/expand
-					handleScroll: function handleScroll() {
-							var fromTop = this.scrollContent.scrollTop;
-							// firefox doesn't like this so we fallback to window
-							if (fromTop === 0) {
-									fromTop = $(window).scrollTop();
-							}
-							var renderedHeight = this.scrollContent.offsetHeight;
+	      if (this.scrollContent === document.getElementsByTagName('body')[0]) {
+	        document.addEventListener('scroll', throttled);
+	      } else {
+	        this.scrollContent.addEventListener('scroll', throttled);
+	      }
+	    },
+
+	    render: function render() {
+	      // we really need this to calculate header heights
+	      this.scrollContent.style.position = "relative";
+
+	      // build a mapping of the table of content based on the
+	      // h1s and h2s in the content
+	      var toc = this.buildTOC();
+
+	      // add toc data
+	      this.node = UI.tag('ul', { className: 'ui_live_toc' }, toc);
+
+	      // calculate the cached heights of each header in the text
+	      $(document).ready(function (e) {
+	        this.updateHeights();
+	      }.bind(this));
+	    },
+
+	    // find all the h1s and h2s in the content and build the TOC elements
+	    buildTOC: function buildTOC() {
+	      var headers = this.content.querySelectorAll('h1, h2, h3');
+	      var toc = [];
+	      var latestMajor, latestMinor;
+
+	      for (var i = 0; i < headers.length; i++) {
+	        var el = headers[i];
+	        var text = $(el).text();
+	        // var anchor = el.getElementsByTagName('a')[0];
+	        // if (anchor === undefined) {
+	        // 	continue;
+	        // }
+	        // var name = anchor.name;
+	        var name = el.id;
+
+	        // Build main table of contents list from h1 tags
+	        if (el.tagName === 'H1') {
+	          latestMajor = UI.tag('ul', { className: 'ui_live_toc_major_list' });
+	          toc.push(UI.tag('li', { 'data-name': name, className: 'ui_live_toc_main' }, [UI.tag('a', { href: '#' + name }, text), latestMajor]));
+	          latestMinor = undefined;
+
+	          // Build collapsable sublist with h2 tags. We skip any H2s
+	          // that appear before the first H1.
+	        } else if (el.tagName === 'H2' && latestMajor !== undefined) {
+	          latestMinor = UI.tag('ul', { className: 'ui_live_toc_minor_list' });
+	          latestMajor.appendChild(UI.tag('li', { 'data-name': name, className: 'ui_live_toc_major' }, [UI.tag('a', { href: '#' + name }, text), latestMinor]));
+
+	          // Build deeper collapsable sublist with h3 tags. We skip any
+	          // H3s that appear before the first H1 or directly after any H1
+	        } else if (el.tagName === 'H3' && latestMajor !== undefined && latestMinor !== undefined) {
+	          latestMinor.appendChild(UI.tag('li', { 'data-name': name, className: 'ui_live_toc_minor' }, [UI.tag('a', { href: '#' + name }, text.toLowerCase())]));
+	        }
+	      }
+	      return toc;
+	    },
+
+	    // Update the internal tracking of header heights. Should be called when
+	    // the content changes in a way that will affect the height of headers
+	    updateHeights: function updateHeights() {
+	      var headerHeights = {};
+	      var sortedHeights = [];
+	      var headers = this.content.querySelectorAll('h1, h2, h3');
+	      for (var i = 0; i < headers.length; i++) {
+	        // var anchor = headers[i].getElementsByTagName('a')[0];
+	        // var name = anchor.name;
+	        var name = headers[i].id;
+
+	        headerHeights[headers[i].offsetTop] = name;
+	        sortedHeights.push(headers[i].offsetTop);
+	      }
+	      this._headerHeights = headerHeights;
+	      this._sortedHeights = sortedHeights.sort(function (a, b) {
+	        return a - b;
+	      });
+	    },
+
+	    // find out what item to highlight in the TOC and what section
+	    // to collapse/expand
+	    handleScroll: function handleScroll() {
+	      var fromTop = this.scrollContent.scrollTop;
+	      // firefox doesn't like this so we fallback to window
+	      if (fromTop === 0) {
+	        fromTop = $(window).scrollTop();
+	      }
+	      var renderedHeight = this.scrollContent.offsetHeight;
 
-							var cur;
-							if (this.alignment === 'top') {
-									cur = fromTop;
-							} else if (this.alignment === 'bottom') {
-									cur = renderedHeight + fromTop;
-							} else {
-									// fallback to center line
-									cur = renderedHeight / 2 + fromTop;
-							}
+	      var cur;
+	      if (this.alignment === 'top') {
+	        cur = fromTop;
+	      } else if (this.alignment === 'bottom') {
+	        cur = renderedHeight + fromTop;
+	      } else {
+	        // fallback to center line
+	        cur = renderedHeight / 2 + fromTop;
+	      }
 
-							// find closest header above the current location
-							var bestHeight = this._sortedHeights[0];
-							for (var i = 0; i < this._sortedHeights.length; i++) {
-									if (this._sortedHeights[i] > cur) {
-											break; // break once we've passed current
-									}
-									bestHeight = this._sortedHeights[i];
-							}
+	      // find closest header above the current location
+	      var bestHeight = this._sortedHeights[0];
+	      for (var i = 0; i < this._sortedHeights.length; i++) {
+	        if (this._sortedHeights[i] > cur) {
+	          break; // break once we've passed current
+	        }
+	        bestHeight = this._sortedHeights[i];
+	      }
 
-							var best = this._headerHeights[bestHeight];
+	      var best = this._headerHeights[bestHeight];
 
-							// only render if nothing is selected or selection has changed
-							if (this.currentItem === null || this.currentItem.getAttribute('data-name') !== best) {
-									// if we have a new item selected, remove current selection
-									var listItems = this.node.getElementsByTagName('li');
-									for (var j = 0; j < listItems.length; j++) {
-											UI.removeClass(listItems[j], 'selected');
-									}
+	      // only render if nothing is selected or selection has changed
+	      if (this.currentItem === null || this.currentItem.getAttribute('data-name') !== best) {
+	        // if we have a new item selected, remove current selection
+	        var listItems = this.node.getElementsByTagName('li');
+	        for (var j = 0; j < listItems.length; j++) {
+	          UI.removeClass(listItems[j], 'selected');
+	        }
 
-									// set newly selected item and add the class
-									this.currentItem = this.node.querySelector('[data-name="' + best + '"]');
-									UI.addClass(this.currentItem, 'selected');
+	        // set newly selected item and add the class
+	        this.currentItem = this.node.querySelector('[data-name="' + best + '"]');
+	        UI.addClass(this.currentItem, 'selected');
 
-									// if the item was a minor header, also select parent (major header)
-									if (UI.hasClass(this.currentItem, 'ui_live_toc_minor')) {
-											UI.addClass(this.currentMajorSection(), 'selected');
-									}
+	        // if the item was a minor header, also select parent (major header)
+	        if (UI.hasClass(this.currentItem, 'ui_live_toc_minor')) {
+	          UI.addClass(this.currentMajorSection(), 'selected');
+	        }
 
-									// if the item was a major header or minor header, also select parent (main header)
-									if (UI.hasClass(this.currentItem, 'ui_live_toc_major') || UI.hasClass(this.currentItem, 'ui_live_toc_minor')) {
-											UI.addClass(this.currentMainSection(), 'selected');
-									}
-							}
-					},
+	        // if the item was a major header or minor header, also select parent (main header)
+	        if (UI.hasClass(this.currentItem, 'ui_live_toc_major') || UI.hasClass(this.currentItem, 'ui_live_toc_minor')) {
+	          UI.addClass(this.currentMainSection(), 'selected');
+	        }
+	      }
+	    },
 
-					/* Utility functions about the state of the content & location */
+	    /* Utility functions about the state of the content & location */
 
-					// find the current main section expanded (this is tied to H1s)
-					currentMainSection: function currentMainSection() {
-							var cur = this.currentItem;
-							while (cur && !UI.hasClass(cur, 'ui_live_toc_main')) {
-									cur = cur.parentElement;
-							}
-							return cur;
-					},
+	    // find the current main section expanded (this is tied to H1s)
+	    currentMainSection: function currentMainSection() {
+	      var cur = this.currentItem;
+	      while (cur && !UI.hasClass(cur, 'ui_live_toc_main')) {
+	        cur = cur.parentElement;
+	      }
+	      return cur;
+	    },
 
-					// find the current major section expanded (this is tied to H2s)
-					currentMajorSection: function currentMajorSection() {
-							if (UI.hasClass(this.currentItem, 'ui_live_toc_main')) {
-									return false;
-							}
+	    // find the current major section expanded (this is tied to H2s)
+	    currentMajorSection: function currentMajorSection() {
+	      if (UI.hasClass(this.currentItem, 'ui_live_toc_main')) {
+	        return false;
+	      }
 
-							var cur = this.currentItem;
-							while (!UI.hasClass(cur, 'ui_live_toc_major')) {
-									cur = cur.parentElement;
-							}
-							return cur;
-					}
-			};
+	      var cur = this.currentItem;
+	      while (!UI.hasClass(cur, 'ui_live_toc_major')) {
+	        cur = cur.parentElement;
+	      }
+	      return cur;
+	    }
+	  };
 
-			_.extend(LiveTOC.prototype, UI.ComponentProto);
+	  _.extend(LiveTOC.prototype, UI.ComponentProto);
 	})(UI, _);
 
 	// docs_toggle.js
 	(function (UI, _) {
-			if (!UI) {
-					return;
-			}
-
-			if (!App.Views.Docs) {
-					App.Views.Docs = {};
-			}
-
-			var Toggle = App.Views.Docs.Toggle = function (options) {
-					this.parent = options.parent;
-					this.opt1 = options.opt1;
-					this.opt2 = options.opt2;
-					this.label1 = options.label1;
-					this.label2 = options.label2;
-					this.onChange = options.onChange;
-					this.render();
-			};
-
-			Toggle.prototype = {
-					render: function render() {
-							var opt1Els = this.parent.getElementsByClassName('hljs ' + this.opt1);
-							for (var i = 0; i < opt1Els.length; i++) {
-									if (opt1Els[i].parentElement.parentElement.getAttribute("class").indexOf("common-lang-block") === -1) {
-											UI.addClass(opt1Els[i], 'has_toggles');
-											opt1Els[i].appendChild(this.renderToggle(true));
-									}
-							}
+	  if (!UI) {
+	    return;
+	  }
 
-							var opt2Els = this.parent.getElementsByClassName('hljs ' + this.opt2);
-							for (i = 0; i < opt2Els.length; i++) {
-									if (opt2Els[i].parentElement.parentElement.getAttribute("class").indexOf("common-lang-block") === -1) {
-											UI.addClass(opt2Els[i], 'has_toggles');
-											opt2Els[i].appendChild(this.renderToggle(false));
-									}
-							}
+	  if (!App.Views.Docs) {
+	    App.Views.Docs = {};
+	  }
 
-							$('.' + this.opt2 + '-toggle').on('click', this.showOpt2.bind(this));
-							$('.' + this.opt1 + '-toggle').on('click', this.showOpt1.bind(this));
-							this.toggleOpt(true);
-					},
+	  var Toggle = App.Views.Docs.Toggle = function (options) {
+	    this.parent = options.parent;
+	    this.opt1 = options.opt1;
+	    this.opt2 = options.opt2;
+	    this.label1 = options.label1;
+	    this.label2 = options.label2;
+	    this.onChange = options.onChange;
+	    this.render();
+	  };
 
-					renderToggle: function renderToggle(selectOpt1) {
-							var toggle = UI.tag('div', { className: 'toggles' }, [UI.tag('div', { className: 'toggle-item' }, [UI.tag('a', { className: this.opt1 + '-toggle', href: '#' }, this.label1)]), UI.tag('div', { className: 'toggle-item' }, [UI.tag('a', { className: this.opt2 + '-toggle', href: '#' }, this.label2)])]);
+	  Toggle.prototype = {
+	    render: function render() {
+	      var opt1Els = this.parent.getElementsByClassName('hljs ' + this.opt1);
+	      for (var i = 0; i < opt1Els.length; i++) {
+	        if (opt1Els[i].parentElement.parentElement.getAttribute("class").indexOf("common-lang-block") === -1) {
+	          UI.addClass(opt1Els[i], 'has_toggles');
+	          opt1Els[i].appendChild(this.renderToggle(true));
+	        }
+	      }
 
-							if (selectOpt1 === true) {
-									UI.addClass(toggle.childNodes[0], 'selected');
-							} else {
-									UI.addClass(toggle.childNodes[1], 'selected');
-							}
+	      var opt2Els = this.parent.getElementsByClassName('hljs ' + this.opt2);
+	      for (i = 0; i < opt2Els.length; i++) {
+	        if (opt2Els[i].parentElement.parentElement.getAttribute("class").indexOf("common-lang-block") === -1) {
+	          UI.addClass(opt2Els[i], 'has_toggles');
+	          opt2Els[i].appendChild(this.renderToggle(false));
+	        }
+	      }
 
-							return toggle;
-					},
+	      $('.' + this.opt2 + '-toggle').on('click', this.showOpt2.bind(this));
+	      $('.' + this.opt1 + '-toggle').on('click', this.showOpt1.bind(this));
+	      this.toggleOpt(true);
+	    },
 
-					showOpt1: function showOpt1(e) {
-							e.preventDefault();
+	    renderToggle: function renderToggle(selectOpt1) {
+	      var toggle = UI.tag('div', { className: 'toggles' }, [UI.tag('div', { className: 'toggle-item' }, [UI.tag('a', { className: this.opt1 + '-toggle', href: '#' }, this.label1)]), UI.tag('div', { className: 'toggle-item' }, [UI.tag('a', { className: this.opt2 + '-toggle', href: '#' }, this.label2)])]);
 
-							// make sure it's the right toggle
-							if ($(e.target).parent().hasClass('selected')) {
-									return false;
-							}
+	      if (selectOpt1 === true) {
+	        UI.addClass(toggle.childNodes[0], 'selected');
+	      } else {
+	        UI.addClass(toggle.childNodes[1], 'selected');
+	      }
 
-							var $pre = $(e.target).closest('pre');
-							var distance = $(window).scrollTop() - $pre[0].offsetTop;
+	      return toggle;
+	    },
 
-							// flash the border
-							var $code = $pre.prev().children('code');
-							$code.addClass('code_flash');
-							setTimeout(function () {
-									$code.removeClass('code_flash');
-							}, 2000);
+	    showOpt1: function showOpt1(e) {
+	      e.preventDefault();
 
-							// scroll to the code block
-							var el = $pre.prev()[0];
-							this.toggleOpt(true);
-							$(window).scrollTop(el.offsetTop + distance);
-					},
+	      // make sure it's the right toggle
+	      if ($(e.target).parent().hasClass('selected')) {
+	        return false;
+	      }
 
-					showOpt2: function showOpt2(e) {
-							e.preventDefault();
+	      var $pre = $(e.target).closest('pre');
+	      var distance = $(window).scrollTop() - $pre[0].offsetTop;
 
-							// make sure it's the right toggle
-							if ($(e.target).parent().hasClass('selected')) {
-									return false;
-							}
+	      // flash the border
+	      var $code = $pre.prev().children('code');
+	      $code.addClass('code_flash');
+	      setTimeout(function () {
+	        $code.removeClass('code_flash');
+	      }, 2000);
 
-							var $pre = $(e.target).closest('pre');
-							var distance = $(window).scrollTop() - $pre[0].offsetTop;
+	      // scroll to the code block
+	      var el = $pre.prev()[0];
+	      this.toggleOpt(true);
+	      $(window).scrollTop(el.offsetTop + distance);
+	    },
 
-							// flash the border
-							var $code = $pre.next().children('code');
-							$code.addClass('code_flash');
-							setTimeout(function () {
-									$code.removeClass('code_flash');
-							}, 2000);
+	    showOpt2: function showOpt2(e) {
+	      e.preventDefault();
 
-							// scroll to the code block
-							var el = $pre.next()[0];
-							this.toggleOpt(false);
-							$(window).scrollTop(el.offsetTop + distance);
-					},
+	      // make sure it's the right toggle
+	      if ($(e.target).parent().hasClass('selected')) {
+	        return false;
+	      }
 
-					toggleOpt: function toggleOpt(showOpt1) {
-							if (showOpt1 === true) {
-									$('.hljs.' + this.opt2).parent().hide();
-									$('.hljs.' + this.opt1).parent().show();
-							} else {
-									$('.hljs.' + this.opt2).parent().show();
-									$('.hljs.' + this.opt1).parent().hide();
-							}
-							this.onChange();
-					}
-			};
+	      var $pre = $(e.target).closest('pre');
+	      var distance = $(window).scrollTop() - $pre[0].offsetTop;
+
+	      // flash the border
+	      var $code = $pre.next().children('code');
+	      $code.addClass('code_flash');
+	      setTimeout(function () {
+	        $code.removeClass('code_flash');
+	      }, 2000);
+
+	      // scroll to the code block
+	      var el = $pre.next()[0];
+	      this.toggleOpt(false);
+	      $(window).scrollTop(el.offsetTop + distance);
+	    },
+
+	    toggleOpt: function toggleOpt(showOpt1) {
+	      if (showOpt1 === true) {
+	        $('.hljs.' + this.opt2).parent().hide();
+	        $('.hljs.' + this.opt1).parent().show();
+	      } else {
+	        $('.hljs.' + this.opt2).parent().show();
+	        $('.hljs.' + this.opt1).parent().hide();
+	      }
+	      this.onChange();
+	    }
+	  };
 
-			_.extend(Toggle.prototype, UI.ComponentProto);
+	  _.extend(Toggle.prototype, UI.ComponentProto);
 	})(UI, _);
 
 	// docs.js
 	(function (UI, _) {
-			if (!UI) {
-					return;
-			}
+	  if (!UI) {
+	    return;
+	  }
 
-			if (!App.Views.Docs) {
-					App.Views.Docs = {};
-			}
+	  if (!App.Views.Docs) {
+	    App.Views.Docs = {};
+	  }
 
-			var Docs = App.Views.Docs.Main = function (options) {
-					this.platform = options.platform;
-					this.language = options.language;
-					this.render();
-			};
+	  var Docs = App.Views.Docs.Main = function (options) {
+	    this.platform = options.platform;
+	    this.language = options.language;
+	    this.render();
+	  };
 
-			Docs.prototype = {
-					render: function render() {
-							// create the TOC
-							this.scrollContent = document.getElementsByTagName('body')[0];
-							this.toc = new UI.LiveTOC({
-									parent: document.getElementById('toc'),
-									scrollContent: this.scrollContent,
-									content: document.getElementsByClassName('guide_content')[0],
-									alignment: 'top'
-							});
+	  Docs.prototype = {
+	    render: function render() {
+	      // create the TOC
+	      this.scrollContent = document.getElementsByTagName('body')[0];
+	      this.toc = new UI.LiveTOC({
+	        parent: document.getElementById('toc'),
+	        scrollContent: this.scrollContent,
+	        content: document.getElementsByClassName('guide_content')[0]
+	      });
 
-							// deal with common-lang-blocks
-							this.toggleCommonLangBlocks();
-
-							// add toggles to code blocks if necessary
-							if (this.platform === "ios" || this.platform === "osx" || this.platform === "macos") {
-									new App.Views.Docs.Toggle({
-											parent: this.scrollContent,
-											opt1: 'objectivec',
-											opt2: 'swift',
-											label1: 'Objective-C',
-											label2: 'Swift',
-											onChange: this.handleToggleChange.bind(this)
-									});
-							} else if (this.platform === "rest") {
-									new App.Views.Docs.Toggle({
-											parent: this.scrollContent,
-											opt1: 'bash',
-											opt2: 'python',
-											label1: 'cURL',
-											label2: 'Python',
-											onChange: this.handleToggleChange.bind(this)
-									});
-							}
+	      // deal with common-lang-blocks
+	      this.toggleCommonLangBlocks();
+
+	      // setup the server/mount path editor
+	      this.setupServerFieldCustomization();
+
+	      // add toggles to code blocks if necessary
+	      if (this.platform === "ios" || this.platform === "osx" || this.platform === "macos") {
+	        new App.Views.Docs.Toggle({
+	          parent: this.scrollContent,
+	          opt1: 'objectivec',
+	          opt2: 'swift',
+	          label1: 'Objective-C',
+	          label2: 'Swift',
+	          onChange: this.handleToggleChange.bind(this)
+	        });
+	      } else if (this.platform === "rest") {
+	        new App.Views.Docs.Toggle({
+	          parent: this.scrollContent,
+	          opt1: 'bash',
+	          opt2: 'python',
+	          label1: 'cURL',
+	          label2: 'Python',
+	          onChange: this.handleToggleChange.bind(this)
+	        });
+	      }
 
-							this.mobileToc = document.getElementById('mobile_toc').getElementsByTagName('select')[0];
-							this.renderMobileTOC();
-
-							// move the TOC with the content. Since it's fixed, we can't just do it in css :(
-							$(window).on('resize', _.throttle(this.handleWindowResize.bind(this), 300));
-							this.handleWindowResize();
-							// calculate final position of headers for the TOC once
-							// the DOM is loaded (including images)
-							$(window).on('load', function () {
-									this.toc.updateHeights();
-							}.bind(this));
-					},
+	      this.mobileToc = document.getElementById('mobile_toc').getElementsByTagName('select')[0];
+	      this.renderMobileTOC();
+
+	      // move the TOC with the content. Since it's fixed, we can't just do it in css :(
+	      $(window).on('resize', _.throttle(this.handleWindowResize.bind(this), 300));
+	      this.handleWindowResize();
+	      // calculate final position of headers for the TOC once
+	      // the DOM is loaded (including images)
+	      $(window).on('load', function () {
+	        this.toc.updateHeights();
+	      }.bind(this));
+	    },
+
+	    renderMobileTOC: function renderMobileTOC() {
+	      var h1s = this.scrollContent.getElementsByTagName('h1');
+	      for (var i = 0; i < h1s.length; i++) {
+	        // var anchor = h1s[i].getElementsByTagName('a')[0];
+	        this.mobileToc.appendChild(UI.tag('option', { 'data-anchor': h1s[i].id }, [h1s[i].textContent]));
+	      }
+	      this.mobileToc.addEventListener('change', this.handleSelectChange.bind(this));
+	      this.mobileToc.getElementsByTagName('option')[0].setAttribute('selected', true);
+	    },
+
+	    // in "common" sections, there's a code block for every platform,
+	    // this hides all but the current one
+	    toggleCommonLangBlocks: function toggleCommonLangBlocks() {
+	      $('.common-lang-block').hide();
+	      switch (this.platform) {
+	        case 'ios':
+	        case 'osx':
+	        case 'macos':
+	          $('.common-lang-block.objectivec').show();
+	          $('.common-lang-block.swift').show();
+	          break;
+	        case 'android':
+	          $('.common-lang-block.java').show();
+	          break;
+	        case 'dotnet':
+	        case 'unity':
+	          $('.common-lang-block.cs').show();
+	          break;
+	        case 'php':
+	          $('.common-lang-block.php').show();
+	          break;
+	        case 'rest':
+	          $('.common-lang-block.bash').show();
+	          $('.common-lang-block.python').show();
+	          break;
+	        case 'arduino':
+	          $('.common-lang-block.cpp').show();
+	          break;
+	        case 'cloudcode':
+	        case 'js':
+	        default:
+	          $('.common-lang-block.js').show();
+	      }
+	    },
 
-					renderMobileTOC: function renderMobileTOC() {
-							var h1s = this.scrollContent.getElementsByTagName('h1');
-							for (var i = 0; i < h1s.length; i++) {
-									// var anchor = h1s[i].getElementsByTagName('a')[0];
-									this.mobileToc.appendChild(UI.tag('option', { 'data-anchor': h1s[i].id }, [h1s[i].textContent]));
-							}
-							this.mobileToc.addEventListener('change', this.handleSelectChange.bind(this));
-							this.mobileToc.getElementsByTagName('option')[0].setAttribute('selected', true);
-					},
+	    setupServerFieldCustomization: function setupServerFieldCustomization() {
 
-					// in "common" sections, there's a code block for every platform,
-					// this hides all but the current one
-					toggleCommonLangBlocks: function toggleCommonLangBlocks() {
-							$('.common-lang-block').hide();
-							switch (this.platform) {
-									case 'ios':
-									case 'osx':
-									case 'macos':
-											$('.common-lang-block.objectivec').show();
-											$('.common-lang-block.swift').show();
-											break;
-									case 'android':
-											$('.common-lang-block.java').show();
-											break;
-									case 'dotnet':
-									case 'unity':
-											$('.common-lang-block.cs').show();
-											break;
-									case 'php':
-											$('.common-lang-block.php').show();
-											break;
-									case 'rest':
-											$('.common-lang-block.bash').show();
-											$('.common-lang-block.python').show();
-											break;
-									case 'arduino':
-											$('.common-lang-block.cpp').show();
-											break;
-									case 'cloudcode':
-									case 'js':
-									default:
-											$('.common-lang-block.js').show();
-							}
-					},
+	      if (!document.getElementById('parse-server-custom-url')) {
+	        // no customization available on this page
+	        return;
+	      }
 
-					// we recalculate the header heights for the TOC
-					// highlighting when the height of the content changes
-					handleToggleChange: function handleToggleChange() {
-							this.toc.updateHeights();
-					},
+	      if (typeof Storage !== "undefined") {
+	        // apply previous values from local storage
+	        var _url = localStorage.getItem('parse-server-custom-url');
+	        var _mount = localStorage.getItem('parse-server-custom-mount');
+	        var _protocol = localStorage.getItem('parse-server-custom-protocol');
+	        var _appId = localStorage.getItem('parse-server-custom-appid');
+	        var _clientKey = localStorage.getItem('parse-server-custom-clientkey');
+
+	        // set existing entries
+	        if (_url) {
+	          $(".custom-parse-server-url").html(_url);
+	          $("#parse-server-custom-url").val(_url);
+	        }
+	        if (_mount) {
+	          $(".custom-parse-server-mount").html(_mount);
+	          $("#parse-server-custom-mount").val(_mount);
+	        }
+	        if (_protocol) {
+	          $(".custom-parse-server-protocol").html(_protocol);
+	          $("#parse-server-custom-protocol").val(_protocol);
+	        }
+	        if (_appId) {
+	          $(".custom-parse-server-appid").html(_appId);
+	          $("#parse-server-custom-appid").val(_appId);
+	        }
+	        if (_clientKey) {
+	          $(".custom-parse-server-clientkey").html(_clientKey);
+	          $("#parse-server-custom-clientkey").val(_clientKey);
+	        }
+	      }
 
-					handleSelectChange: function handleSelectChange(e) {
-							location.href = "#" + this.mobileToc.selectedOptions[0].getAttribute('data-anchor');
-					},
+	      // set url listener
+	      $('#parse-server-custom-url').keyup(function () {
+	        var url = $('#parse-server-custom-url').val();
+	        if (!url.match(/^[-_a-z0-9\.]+(?::[0-9]+)?$/i)) {
+	          // not a valid url
+	          return;
+	        }
+	        $(".custom-parse-server-url").html(url);
+	        if (typeof Storage !== "undefined") {
+	          localStorage.setItem('parse-server-custom-url', url);
+	        }
+	      });
 
-					handleWindowResize: function handleWindowResize(e) {
-							this.toc.parent.style.left = $(".guide").css("margin-left");
-							this.toc.updateHeights();
-					}
-			};
+	      // set mount listener
+	      $('#parse-server-custom-mount').keyup(function () {
+	        var mount = $('#parse-server-custom-mount').val();
+	        if (!mount.match(/^[-_a-z0-9\/]+$/i) && mount !== '') {
+	          // not a valid mount path, and not empty
+	          return;
+	        }
+	        if (!mount.match(/^\//)) {
+	          // add leading slash
+	          mount = '/' + mount;
+	        }
+	        if (!mount.match(/\/$/)) {
+	          // add trailing slash
+	          mount = mount + '/';
+	        }
+	        $(".custom-parse-server-mount").html(mount);
+	        if (typeof Storage !== "undefined") {
+	          localStorage.setItem('parse-server-custom-mount', mount);
+	        }
+	      });
 
-			_.extend(Docs.prototype, UI.ComponentProto);
+	      // set protocol listener
+	      $('#parse-server-custom-protocol').change(function () {
+	        var protocol = $('#parse-server-custom-protocol').val();
+	        if (!protocol.match(/^[a-z]+$/)) {
+	          // not a valid protocol
+	          return;
+	        }
+	        $(".custom-parse-server-protocol").html(protocol);
+	        if (typeof Storage !== "undefined") {
+	          localStorage.setItem('parse-server-custom-protocol', protocol);
+	        }
+	      });
+
+	      // set appId listener
+	      $('#parse-server-custom-appid').keyup(function () {
+	        var appId = $('#parse-server-custom-appid').val();
+	        if (!appId.match(/^[^\s]+$/i)) {
+	          // not a valid appId
+	          return;
+	        }
+	        // encode any html
+	        appId = appId.replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"');
+	        $(".custom-parse-server-appid").html(appId);
+	        if (typeof Storage !== "undefined") {
+	          localStorage.setItem('parse-server-custom-appid', appId);
+	        }
+	      });
+
+	      // set clientKey listener
+	      $('#parse-server-custom-clientkey').keyup(function () {
+	        var clientKey = $('#parse-server-custom-clientkey').val();
+	        if (!clientKey.match(/^[^\s]+$/i)) {
+	          // not a valid appId
+	          return;
+	        }
+	        // encode any html
+	        clientKey = clientKey.replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"');
+	        $(".custom-parse-server-clientkey").html(clientKey);
+	        if (typeof Storage !== "undefined") {
+	          localStorage.setItem('parse-server-custom-clientkey', clientKey);
+	        }
+	      });
+	    },
+
+	    // we recalculate the header heights for the TOC
+	    // highlighting when the height of the content changes
+	    handleToggleChange: function handleToggleChange() {
+	      this.toc.updateHeights();
+	    },
+
+	    handleSelectChange: function handleSelectChange(e) {
+	      location.href = this.mobileToc.selectedOptions[0].getAttribute('data-anchor');
+	    },
+
+	    handleWindowResize: function handleWindowResize(e) {
+	      this.toc.parent.style.left = $(".guide").css("margin-left");
+	      this.toc.updateHeights();
+	    }
+	  };
+
+	  _.extend(Docs.prototype, UI.ComponentProto);
 	})(UI, _);
 
 	$('pre code').each(function (i, block) {
-			hljs.highlightBlock(block);
+	  hljs.highlightBlock(block);
 	});
 
 	var platform = window.location.pathname.split('/')[1];
 	if (platform) {
-			new App.Views.Docs.Main({
-					language: 'en',
-					platform: platform
-			});
+	  new App.Views.Docs.Main({
+	    language: 'en',
+	    platform: platform
+	  });
 	}
 	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(1), __webpack_require__(2)))
 
-/***/ },
+/***/ }),
 /* 1 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;'use strict';
 
@@ -2387,9 +2489,9 @@
 	  }
 	}).call(undefined);
 
-/***/ },
+/***/ }),
 /* 2 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -2398,9 +2500,9 @@
 		return window.jQuery = window.$ = jQuery;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 3 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -2848,9 +2950,9 @@
 		return jQuery;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 4 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -2879,9 +2981,9 @@
 		};
 	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 5 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -3368,9 +3470,9 @@
 		return jQuery;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 6 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -3378,9 +3480,9 @@
 		return arr.indexOf;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 7 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -3388,9 +3490,9 @@
 		return [];
 	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 8 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -3398,9 +3500,9 @@
 		return arr.slice;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 9 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -3408,9 +3510,9 @@
 		return arr.concat;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 10 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -3418,9 +3520,9 @@
 		return arr.push;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 11 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -3428,9 +3530,9 @@
 		return window.document;
 	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 12 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -3440,9 +3542,9 @@
 		return {};
 	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 13 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -3450,9 +3552,9 @@
 		return class2type.toString;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 14 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -3460,9 +3562,9 @@
 		return class2type.hasOwnProperty;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 15 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -3472,9 +3574,9 @@
 		return {};
 	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 16 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -3534,9 +3636,9 @@
 		return access;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 17 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -3545,9 +3647,9 @@
 		);
 	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 18 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -3556,9 +3658,9 @@
 		return new RegExp("^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i");
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 19 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -3567,9 +3669,9 @@
 		);
 	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 20 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -3577,9 +3679,9 @@
 		return new RegExp("^(" + pnum + ")(?!px)[a-z%]+$", "i");
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 21 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -3587,9 +3689,9 @@
 		return ["Top", "Right", "Bottom", "Left"];
 	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 22 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -3607,17 +3709,17 @@
 		};
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 23 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
 	!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(24)], __WEBPACK_AMD_DEFINE_RESULT__ = function () {}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 24 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -3632,9 +3734,9 @@
 		jQuery.contains = Sizzle.contains;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 25 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -5688,9 +5790,9 @@
 		// EXPOSE
 	})(window);
 
-/***/ },
+/***/ }),
 /* 26 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -5710,9 +5812,9 @@
 		};
 	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 27 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -5773,9 +5875,9 @@
 		return curCSS;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 28 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -5893,9 +5995,9 @@
 		return support;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 29 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -5903,9 +6005,9 @@
 		return document.documentElement;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 30 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -5970,9 +6072,9 @@
 		return adjustCSS;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 31 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -6044,9 +6146,9 @@
 		return defaultDisplay;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 32 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -6505,9 +6607,9 @@
 		return jQuery;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 33 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -6612,9 +6714,9 @@
 		return buildFragment;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 34 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -6623,9 +6725,9 @@
 		);
 	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 35 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -6634,9 +6736,9 @@
 		);
 	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 36 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -6668,9 +6770,9 @@
 		return wrapMap;
 	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 37 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -6688,9 +6790,9 @@
 		return getAll;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 38 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -6709,9 +6811,9 @@
 		return setGlobalEval;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 39 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -6719,9 +6821,9 @@
 		return new Data();
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 40 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -6918,9 +7020,9 @@
 		return Data;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 41 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -6929,9 +7031,9 @@
 		);
 	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 42 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -6953,9 +7055,9 @@
 		};
 	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 43 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -6964,9 +7066,9 @@
 		);
 	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 44 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -7000,9 +7102,9 @@
 		return support;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 45 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -7010,9 +7112,9 @@
 		return new Data();
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 46 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -7137,9 +7239,9 @@
 		return init;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 47 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -7150,9 +7252,9 @@
 		);
 	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 48 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -7242,9 +7344,9 @@
 		});
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 49 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -7252,9 +7354,9 @@
 		return jQuery.expr.match.needsContext;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 50 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -7415,9 +7517,9 @@
 		return jQuery;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 51 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -7439,9 +7541,9 @@
 		};
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 52 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -7460,9 +7562,9 @@
 		};
 	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 53 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -8165,9 +8267,9 @@
 		return jQuery;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 54 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -8195,9 +8297,9 @@
 		return addGetHookIf;
 	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 55 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -8297,9 +8399,9 @@
 		jQuery.ready.promise();
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 56 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -8449,9 +8551,9 @@
 		return jQuery;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 57 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -8688,9 +8790,9 @@
 		return jQuery;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 58 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -8877,9 +8979,9 @@
 		return jQuery;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 59 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -9020,9 +9122,9 @@
 		return jQuery;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 60 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -9046,9 +9148,9 @@
 		return jQuery.fn.delay;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 61 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -9659,9 +9761,9 @@
 		return jQuery;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 62 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -9776,9 +9878,9 @@
 		jQuery.fx.step = {};
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 63 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -9788,9 +9890,9 @@
 		return jQuery;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 64 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -9927,9 +10029,9 @@
 		});
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 65 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -9966,9 +10068,9 @@
 		return support;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 66 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -10076,9 +10178,9 @@
 		});
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 67 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -10257,9 +10359,9 @@
 		});
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 68 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -10426,9 +10528,9 @@
 		});
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 69 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -10449,9 +10551,9 @@
 		});
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 70 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -10624,9 +10726,9 @@
 		return jQuery;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 71 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -10676,9 +10778,9 @@
 		return jQuery;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 72 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -10689,9 +10791,9 @@
 		return support;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 73 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -10713,9 +10815,9 @@
 		return jQuery._evalUrl;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 74 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -11571,9 +11673,9 @@
 		return jQuery;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 75 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -11581,9 +11683,9 @@
 		return window.location;
 	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 76 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -11591,9 +11693,9 @@
 		return jQuery.now();
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 77 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -11602,9 +11704,9 @@
 		);
 	}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 78 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -11619,9 +11721,9 @@
 		return jQuery.parseJSON;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 79 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -11650,9 +11752,9 @@
 		return jQuery.parseXML;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 80 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -11732,9 +11834,9 @@
 		return jQuery;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 81 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -11753,9 +11855,9 @@
 		};
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 82 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -11865,9 +11967,9 @@
 		return jQuery;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 83 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -12018,9 +12120,9 @@
 		});
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 84 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -12084,9 +12186,9 @@
 		});
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 85 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -12179,9 +12281,9 @@
 		});
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 86 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -12265,9 +12367,9 @@
 		};
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 87 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -12307,9 +12409,9 @@
 		return jQuery.parseHTML;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 88 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -12323,9 +12425,9 @@
 		});
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 89 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -12338,9 +12440,9 @@
 		};
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 90 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -12545,9 +12647,9 @@
 		return jQuery;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 91 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -12597,9 +12699,9 @@
 		return jQuery;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 92 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -12630,9 +12732,9 @@
 		jQuery.fn.andSelf = jQuery.fn.addBack;
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ },
+/***/ }),
 /* 93 */
-/***/ function(module, exports, __webpack_require__) {
+/***/ (function(module, exports, __webpack_require__) {
 
 	var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;"use strict";
 
@@ -12658,5 +12760,5 @@
 		}
 	}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
 
-/***/ }
+/***/ })
 /******/ ]);
\ No newline at end of file
diff --git a/css/docs.scss b/css/docs.scss
index f4ccf0765..2b35771cc 100644
--- a/css/docs.scss
+++ b/css/docs.scss
@@ -73,6 +73,7 @@ $svg-plus: "{{ '/assets/svgs/plus.svg' | prepend: site.baseurl }}";
 @import "lib/marketing/components/banner-ctas";
 
 @import "lib/docs/components/live-toc";
+@import "lib/docs/components/custom-server";
 @import "lib/docs/components/docs-platform";
 @import "lib/docs/components/docsearch";
 @import "lib/marketing/components/logo-stacks";
diff --git a/css/lib/docs/components/_custom-server.scss b/css/lib/docs/components/_custom-server.scss
new file mode 100644
index 000000000..6a2b7fe1c
--- /dev/null
+++ b/css/lib/docs/components/_custom-server.scss
@@ -0,0 +1,17 @@
+.custom-server-option {
+  margin: 4px 0 !important;
+  padding: 8px !important;
+  background: #f3f3f3 !important;
+  border-radius: 4px !important;
+  font-size: 12px !important;
+}
+
+.custom-server-option:focus {
+  outline: 0;
+}
+
+.custom-server-description {
+  margin: 2px;
+  font-size: 16px;
+  font-weight: 100;
+}
\ No newline at end of file
diff --git a/css/lib/multisite/_wysiwyg.scss b/css/lib/multisite/_wysiwyg.scss
index ea0138948..06c06beb1 100644
--- a/css/lib/multisite/_wysiwyg.scss
+++ b/css/lib/multisite/_wysiwyg.scss
@@ -112,6 +112,7 @@
 
             &:before{
                 display:inline-block;
+                float: left;
                 content: "";
                 left: 0; top:3px;
                 width: 15px; height: 11px;
diff --git a/rest.md b/rest.md
index 99bdc0965..e2478d09a 100644
--- a/rest.md
+++ b/rest.md
@@ -9,6 +9,7 @@ redirect_from:
   - /rest/
 
 sections:
+- "common/server-customize.md"
 - "rest/getting-started.md"
 - "rest/quick-reference.md"
 - "rest/objects.md"