{"action":"created","comment":{"url":"https://api.github.com/repos/ParsePlatform/Docs/pulls/comments/32448061","id":32448061,"diff_hunk":"@@ -0,0 +1,607 @@\n+# Hooks\n+\n+You can create, update, list or delete all your cloud code webhooks via the Hooks API,\n+in addition to being able to do so through the parse website.\n+\n+Hooks API requires the users to provide `Application-Id` and `Master-Key` in the request headers.\n+\n+There are two kinds of cloud code webhooks: function webhooks and trigger webhooks.\n+\n+Cloud functions are functions that run in the cloud and allow you to build functions\n+common to all platforms.\n+For more details please read [cloud code functions](https://parse.com/docs/js/guide#cloud-code-cloud-functions).\n+\n+Cloud triggers are invoked whenever you save or delete a parse object.\n+Triggers are commonly used to validate your objects before saving them.\n+For more details please read [cloud code triggers](https://parse.com/docs/js/guide#cloud-code-beforesave-triggers).\n+\n+Lets establish some basic terminology used throughout the rest of this section.\n+\n+`Cloud Code Webhooks` consist of `function webhooks` and `trigger webhooks`. This is code that runs on your servers.\n+\n+`Cloud Code` has `cloud code functions` and `cloud code triggers`. This is code that runs on the Parse servers.\n+\n+These are the generic concepts encapsulating both use cases:\n+\n+`Cloud Function` is either a `cloud code function` or a `function webhook`\n+`Cloud Trigger` is either a `cloud code trigger` or a `trigger webhook`\n+\n+\n+## Fetch functions\n+To fetch the list of all cloud functions you deployed or created, use:\n+\n+```bash\n+curl -X GET \\\n+  -H \"X-Parse-Application-Id: ${APPLICATION_ID}\" \\\n+  -H \"X-Parse-Master-Key: ${MASTER_KEY}\" \\\n+  -H \"Content-Type: application/json\" \\\n+  https://api.parse.com/1/hooks/functions\n+```\n+```python\n+import json,httplib\n+connection = httplib.HTTPSConnection('api.parse.com', 443)\n+connection.connect()\n+connection.request('GET', '/1/hooks/functions', '', {\n+       \"X-Parse-Application-Id\": \"${APPLICATION_ID}\",\n+       \"X-Parse-Master-Key\": \"${MASTER_KEY}\",\n+       \"Content-Type\": \"application/json\"\n+     })\n+result = json.loads(connection.getresponse().read())\n+print result\n+```\n+\n+The output may look like this:\n+```json\n+{\n+  \"results\": [\n+    { \"functionName\": \"sendMessage\", \"url\": \"https://api.example.com/sendMessage\" },\n+    { \"functionName\": \"sendMessage\" },\n+    { \"functionName\": \"foo\", \"url\": \"https://api.example.com/foo\" },\n+    { \"functionName\": \"bar\" }\n+  ]\n+}\n+```\n+The output is a json object with one key: \"results\" whose value is a list of cloud functions.\n+\n+To fetch a single cloud function with a given name, use:\n+\n+```bash\n+curl -X GET \\\n+  -H \"X-Parse-Application-Id: ${APPLICATION_ID}\" \\\n+  -H \"X-Parse-Master-Key: ${MASTER_KEY}\" \\\n+  -H \"Content-Type: application/json\" \\\n+  https://api.parse.com/1/hooks/functions/sendMessage\n+```\n+```python\n+import json,httplib\n+connection = httplib.HTTPSConnection('api.parse.com', 443)\n+connection.connect()\n+connection.request('GET', '/1/hooks/functions/sendMessage', '', {\n+       \"X-Parse-Application-Id\": \"${APPLICATION_ID}\",\n+       \"X-Parse-Master-Key\": \"${MASTER_KEY}\",\n+       \"Content-Type\": \"application/json\"\n+     })\n+result = json.loads(connection.getresponse().read())\n+print result\n+```\n+\n+The output is a json object with one key: \"results\" whose value is a list of cloud functions with the given name.\n+\n+```json\n+{\n+  \"results\": [\n+    { \"functionName\": \"sendMessage\", \"url\": \"https://api.example.com/sendMessage\" },\n+    { \"functionName\": \"sendMessage\" }\n+  ]\n+}\n+```\n+\n+## Fetch triggers\n+To fetch the list of all cloud triggers you deployed or created, use:\n+```bash\n+curl -X GET \\\n+  -H \"X-Parse-Application-Id: ${APPLICATION_ID}\" \\\n+  -H \"X-Parse-Master-Key: ${MASTER_KEY}\" \\\n+  -H \"Content-Type: application/json\" \\\n+  https://api.parse.com/1/hooks/triggers\n+```\n+```python\n+import json,httplib\n+connection = httplib.HTTPSConnection('api.parse.com', 443)\n+connection.connect()\n+connection.request('GET', '/1/hooks/triggers', '', {\n+       \"X-Parse-Application-Id\": \"${APPLICATION_ID}\",\n+       \"X-Parse-Master-Key\": \"${MASTER_KEY}\",\n+       \"Content-Type\": \"application/json\"\n+     })\n+result = json.loads(connection.getresponse().read())\n+print result\n+```\n+\n+The output may look like this:\n+```json\n+{\n+  \"results\": [\n+    { \"className\": \"Scores\", \"triggerName\": \"beforeSave\" },\n+    {\n+      \"className\": \"Scores\",\n+      \"triggerName\": \"beforeSave\",\n+      \"url\": \"https://api.example.com/Scores/beforeSave\"\n+    },\n+    {\n+      \"className\": \"Game\",\n+      \"triggerName\": \"afterSave\",\n+      \"url\": \"https://api.example.com/Game/afterSave\"\n+    },\n+    { \"className\": \"Tournament\", \"triggerName\": \"beforeDelete\" }\n+  ]\n+}\n+```\n+\n+The output is a json object with one key: \"results\" whose value is a list of cloud triggers. \n+\n+To fetch a single cloud trigger, use:\n+```bash\n+curl -X GET \\\n+  -H \"X-Parse-Application-Id: ${APPLICATION_ID}\" \\\n+  -H \"X-Parse-Master-Key: ${MASTER_KEY}\" \\\n+  -H \"Content-Type: application/json\" \\\n+  https://api.parse.com/1/hooks/triggers/Scores/beforeSave\n+```\n+```python\n+import json,httplib\n+connection = httplib.HTTPSConnection('api.parse.com', 443)\n+connection.connect()\n+connection.request('GET', '/1/hooks/triggers/Scores/beforeSave', '', {\n+       \"X-Parse-Application-Id\": \"${APPLICATION_ID}\",\n+       \"X-Parse-Master-Key\": \"${MASTER_KEY}\",\n+       \"Content-Type\": \"application/json\"\n+     })\n+result = json.loads(connection.getresponse().read())\n+print result\n+```\n+\n+The path looks like `/hooks/triggers/className/triggerName` where `triggerName`\n+can be one of `beforeSave`, `afterSave`, `beforeDelete`, `afterDelete`.\n+\n+The output may look like this:\n+```json\n+{\n+  \"results\": [\n+    { \"className\": \"Scores\", \"triggerName\": \"beforeSave\" },\n+    {\n+      \"className\": \"Scores\",\n+      \"triggerName\": \"beforeSave\",\n+      \"url\": \"https://api.example.com/Scores/beforeSave\"\n+    }\n+  ]\n+}\n+```\n+\n+The output is a json object with one key: \"results\" whose value is a list of all\n+cloud triggers with given name for a given class.\n+\n+Note that POST, PUT and DELETE only work on function or trigger webhooks.\n+To create cloud code functions or cloud code triggers you can modify your cloud code javascript files\n+and perform a `parse deploy` the usual way.\n+\n+## Create function webhook\n+To create a new function webhook post to `/1/hooks/functions` with payload in the format\n+```bash\n+{\"functionName\" : x, \"url\" : y}\n+```\n+\n+Post example,\n+\n+```bash\n+curl -X POST \\\n+  -H \"X-Parse-Application-Id: ${APPLICATION_ID}\" \\\n+  -H \"X-Parse-Master-Key: ${MASTER_KEY}\" \\\n+  -H \"Content-Type: application/json\" \\\n+  -d '{\"functionName\":\"baz\",\"url\":\"https://api.example.com/baz\"}' \\\n+  https://api.parse.com/1/hooks/functions\n+```\n+```python\n+import json,httplib\n+connection = httplib.HTTPSConnection('api.parse.com', 443)\n+connection.connect()\n+connection.request('POST', '/1/hooks/functions', json.dumps(\n+       {\"functionName\":\"baz\",\"url\":\"https://api.example.com/baz\"}\n+     ), {\n+       \"X-Parse-Application-Id\": \"${APPLICATION_ID}\",\n+       \"X-Parse-Master-Key\": \"${MASTER_KEY}\",\n+       \"Content-Type\": \"application/json\"\n+     })\n+result = json.loads(connection.getresponse().read())\n+print result\n+```\n+\n+The output may look like this:\n+```json\n+{\"functionName\": \"baz\", \"url\": \"https://api.example.com/baz\"}'\n+```\n+\n+It returns the function name and url of the created webhook.\n+\n+If you try to create a function webhook and a cloud code function with the same name already exists, upon successful creation the response json has an additional `warning` field informing about the name conflict. Note that, function webhooks takes precedence over cloud code functions.\n+\n+For example,\n+```bash\n+curl -X POST \\\n+  -H \"X-Parse-Application-Id: ${APPLICATION_ID}\" \\\n+  -H \"X-Parse-Master-Key: ${MASTER_KEY}\" \\\n+  -H \"Content-Type: application/json\" \\\n+  -d '{\"functionName\":\"bar\",\"url\":\"https://api.example.com/bar\"}' \\\n+  https://api.parse.com/1/hooks/functions\n+```\n+```python\n+import json,httplib\n+connection = httplib.HTTPSConnection('api.parse.com', 443)\n+connection.connect()\n+connection.request('POST', '/1/hooks/functions', json.dumps(\n+       {\"functionName\":\"bar\",\"url\":\"https://api.example.com/bar\"}\n+     ), {\n+       \"X-Parse-Application-Id\": \"${APPLICATION_ID}\",\n+       \"X-Parse-Master-Key\": \"${MASTER_KEY}\",\n+       \"Content-Type\": \"application/json\"\n+     })\n+result = json.loads(connection.getresponse().read())\n+print result\n+```\n+\n+The output may look like this:\n+```json\n+{\n+  \"functionName\": \"bar\",\n+  \"url\": \"https://api.example.com/bar\",\n+  \"warning\": \"a cloudcode function with name: bar already exists\"\n+}\n+```\n+\n+## Create trigger webhook\n+To create a new function webhook post to `/1/hooks/triggers` with payload in the format\n+```bash\n+{\"className\": x, \"triggerName\": y, \"url\": z}\n+```\n+```python\n+{\"className\": x, \"triggerName\": y, \"url\": z}\n+```\n+\n+Post example,\n+```bash\n+curl -X POST \\\n+  -H \"X-Parse-Application-Id: ${APPLICATION_ID}\" \\\n+  -H \"X-Parse-Master-Key: ${MASTER_KEY}\" \\\n+  -H \"Content-Type: application/json\" \\\n+  -d '{\"className\": \"Game\", \"triggerName\": \"beforeSave\", \"url\": \"https://api.example.com/Game/beforeSave\"}' \\\n+https://api.parse.com/1/hooks/triggers\n+```\n+```python\n+import json,httplib\n+connection = httplib.HTTPSConnection('api.parse.com', 443)\n+connection.connect()\n+connection.request('POST', '/1/hooks/triggers', json.dumps(\n+       {\"className\": \"Game\", \"triggerName\": \"beforeSave\", \"url\": \"https://api.example.com/Game/beforeSave\"}\n+     ), {\n+       \"X-Parse-Application-Id\": \"${APPLICATION_ID}\",\n+       \"X-Parse-Master-Key\": \"${MASTER_KEY}\",\n+       \"Content-Type\": \"application/json\"\n+     })\n+result = json.loads(connection.getresponse().read())\n+print result\n+```\n+\n+The output may look like this:\n+```json\n+{\n+  \"className\": \"Game\",\n+  \"triggerName\": \"beforeSave\",\n+  \"url\": \"https://api.example.com/Game/beforeSave\"\n+}\n+```\n+\n+It returns the class name, trigger name and url of the created trigger webhook.\n+\n+If you try to create a trigger webhook and a cloud code trigger with the same name already exists, upon successful creation the response json has an additional `warning` field informing about the name conflict. Note that, trigger webhooks takes precedence over cloud code triggers.\n+\n+For example,\n+```bash\n+curl -X POST \\\n+  -H \"X-Parse-Application-Id: ${APPLICATION_ID}\" \\\n+  -H \"X-Parse-Master-Key: ${MASTER_KEY}\" \\\n+  -H \"Content-Type: application/json\" \\\n+  -d '{\"className\": \"Tournament\", \"triggerName\": \"beforeDelete\", \"url\": \"https://api.example.com/Scores/beforeDelete\"}' \\\n+https://api.parse.com/1/hooks/triggers\n+```\n+```python\n+import json,httplib\n+connection = httplib.HTTPSConnection('api.parse.com', 443)\n+connection.connect()\n+connection.request('POST', '/1/hooks/triggers', json.dumps(\n+       {\"className\": \"Tournament\", \"triggerName\": \"beforeDelete\", \"url\": \"https://api.example.com/Scores/beforeDelete\"}\n+     ), {\n+       \"X-Parse-Application-Id\": \"${APPLICATION_ID}\",\n+       \"X-Parse-Master-Key\": \"${MASTER_KEY}\",\n+       \"Content-Type\": \"application/json\"\n+     })\n+result = json.loads(connection.getresponse().read())\n+print result\n+```\n+\n+The output may look like this:\n+```json\n+{\n+  \"className\": \"Tournament\",\n+  \"triggerName\": \"beforeDelete\",\n+  \"url\": \"https://api.example.com/Tournament/beforeDelete\",\n+  \"warning\": \"beforeDelete trigger already defined for class Tournament in cloud code\"\n+}\n+```\n+\n+## Edit function webhook\n+To edit the url of a function webhook that was already created use the put method.\n+\n+Put example,\n+```bash\n+curl -X PUT \\\n+  -H \"X-Parse-Application-Id: ${APPLICATION_ID}\" \\\n+  -H \"X-Parse-Master-Key: ${MASTER_KEY}\" \\\n+  -H \"Content-Type: application/json\" \\\n+  -d '{\"url\":\"https://api.example.com/_baz\"}' \\\n+  https://api.parse.com/1/hooks/functions/baz\n+```\n+```python\n+import json,httplib\n+connection = httplib.HTTPSConnection('api.parse.com', 443)\n+connection.connect()\n+connection.request('PUT', '/1/hooks/functions/baz', json.dumps(\n+    {\"url\":\"https://api.example.com/_baz\"}\n+      ), {\n+       \"X-Parse-Application-Id\": \"${APPLICATION_ID}\",\n+       \"X-Parse-Master-Key\": \"${MASTER_KEY}\",\n+       \"Content-Type\": \"application/json\"\n+     })\n+result = json.loads(connection.getresponse().read())\n+print result\n+```\n+\n+The output may look like this:\n+```json\n+{\"functionName\": \"baz\", \"url\": \"https://api.example.com/baz\"}'\n+```\n+\n+It returns the function name and url of the modified webhook.\n+\n+If you try to update a function webhook and a cloud code function with the same name already exists, upon successful update the response json has an additional `warning` field informing about the name conflict. Note that, function webhooks takes precedence over cloud code functions.\n+\n+For example,\n+```bash\n+curl -X PUT \\\n+  -H \"X-Parse-Application-Id: ${APPLICATION_ID}\" \\\n+  -H \"X-Parse-Master-Key: ${MASTER_KEY}\" \\\n+  -H \"Content-Type: application/json\" \\\n+  -d '{\"url\":\"https://api.example.com/_bar\"}' \\\n+  https://api.parse.com/1/hooks/functions/bar\n+```\n+```python\n+import json,httplib\n+connection = httplib.HTTPSConnection('api.parse.com', 443)\n+connection.connect()\n+connection.request('PUT', '/1/hooks/functions/bar', json.dumps(\n+      {\"url\":\"https://api.example.com/_bar\"}\n+      ), {\n+       \"X-Parse-Application-Id\": \"${APPLICATION_ID}\",\n+       \"X-Parse-Master-Key\": \"${MASTER_KEY}\",\n+       \"Content-Type\": \"application/json\"\n+     })\n+result = json.loads(connection.getresponse().read())\n+print result\n+```\n+\n+The output may look like this:\n+```json\n+{\n+  \"functionName\": \"bar\",\n+  \"url\": \"https://api.example.com/_bar\",\n+  \"warning\": \"a cloudcode function with name: bar already exists\"\n+}\n+```\n+\n+## Edit trigger webhook\n+To edit the url of a trigger webhook that was already crated use the put method.\n+\n+```bash\n+curl -X PUT \\\n+  -H \"X-Parse-Application-Id: ${APPLICATION_ID}\" \\\n+  -H \"X-Parse-Master-Key: ${MASTER_KEY}\" \\\n+  -H \"Content-Type: application/json\" \\\n+  -d '{\"url\": \"https://api.example.com/Game/_beforeSave\"}' \\\n+https://api.parse.com/1/hooks/triggers/Game/beforeSave\n+```\n+```python\n+import json,httplib\n+connection = httplib.HTTPSConnection('api.parse.com', 443)\n+connection.connect()\n+connection.request('PUT', '/1/hooks/triggers/Game/beforeSave', json.dumps(\n+      {\"url\": \"https://api.example.com/Game/_beforeSave\"}\n+      ), {\n+       \"X-Parse-Application-Id\": \"${APPLICATION_ID}\",\n+       \"X-Parse-Master-Key\": \"${MASTER_KEY}\",\n+       \"Content-Type\": \"application/json\"\n+     })\n+result = json.loads(connection.getresponse().read())\n+print result\n+```\n+\n+The output may look like this:\n+```json\n+{\n+  \"className\": \"Game\",\n+  \"triggerName\": \"beforeSave\",\n+  \"url\": \"https://api.example.com/Game/_beforeSave\"\n+}\n+```\n+\n+It returns the class name, trigger name and url of the modified trigger webhook.\n+\n+If you try to update a trigger webhook and a cloud code trigger with the same name already exists, upon successful update the response json has an additional `warning` field informing about the name conflict. Note that, trigger webhooks takes precedence over cloud code triggers.\n+\n+For example,\n+```bash\n+curl -X PUT \\\n+  -H \"X-Parse-Application-Id: ${APPLICATION_ID}\" \\\n+  -H \"X-Parse-Master-Key: ${MASTER_KEY}\" \\\n+  -H \"Content-Type: application/json\" \\\n+  -d '{\"url\": \"https://api.example.com/Scores/beforeDelete\"}' \\\n+https://api.parse.com/1/hooks/triggers/Tournament/beforeDelete\n+```\n+```python\n+import json,httplib\n+connection = httplib.HTTPSConnection('api.parse.com', 443)\n+connection.connect()\n+connection.request('PUT', '/1/hooks/triggers/Tournament/beforeDelete', json.dumps(\n+      {\"url\": \"https://api.example.com/Scores/beforeDelete\"}\n+      ), {\n+       \"X-Parse-Application-Id\": \"${APPLICATION_ID}\",\n+       \"X-Parse-Master-Key\": \"${MASTER_KEY}\",\n+       \"Content-Type\": \"application/json\"\n+     })\n+result = json.loads(connection.getresponse().read())\n+print result\n+```\n+\n+The output may look like this:\n+```json\n+{\n+  \"className\": \"Tournament\",\n+  \"triggerName\": \"beforeDelete\",\n+  \"url\": \"https://api.example.com/Tournament/beforeDelete\",\n+  \"warning\": \"beforeDelete trigger already defined for class Tournament in cloud code\"\n+}\n+```\n+\n+## Delete function webhook\n+To delete a function webhook use the put method.\n+\n+```bash\n+curl -X PUT \\\n+  -H \"X-Parse-Application-Id: ${APPLICATION_ID}\" \\\n+  -H \"X-Parse-Master-Key: ${MASTER_KEY}\" \\\n+  -H \"Content-Type: application/json\" \\\n+  -d '{\"__op\": \"Delete\"}' \\\n+https://api.parse.com/1/hooks/functions/foo\n+```\n+```python\n+import json,httplib\n+connection = httplib.HTTPSConnection('api.parse.com', 443)\n+connection.connect()\n+connection.request('PUT', '/1/hooks/functions/foo', json.dumps(\n+      {\"__op\": \"Delete\"}\n+      ), {\n+       \"X-Parse-Application-Id\": \"${APPLICATION_ID}\",\n+       \"X-Parse-Master-Key\": \"${MASTER_KEY}\",\n+       \"Content-Type\": \"application/json\"\n+     })\n+result = json.loads(connection.getresponse().read())\n+print result\n+```\n+\n+The output may look like this:\n+```json\n+{}\n+```\n+\n+If a cloud code trigger with the same name already exists then the it is returned as the result.\n+\n+```bash\n+curl -X PUT \\\n+  -H \"X-Parse-Application-Id: ${APPLICATION_ID}\" \\\n+  -H \"X-Parse-Master-Key: ${MASTER_KEY}\" \\\n+  -H \"Content-Type: application/json\" \\\n+  -d '{ \"__op\": \"Delete\" }' \\\n+https://api.parse.com/1/hooks/functions/sendMessage\n+```\n+```python\n+import json,httplib\n+connection = httplib.HTTPSConnection('api.parse.com', 443)\n+connection.connect()\n+connection.request('PUT', '/1/hooks/functions/sendMessage', json.dumps(\n+      {\"__op\": \"Delete\"}\n+      ), {\n+       \"X-Parse-Application-Id\": \"${APPLICATION_ID}\",\n+       \"X-Parse-Master-Key\": \"${MASTER_KEY}\",\n+       \"Content-Type\": \"application/json\"\n+     })\n+result = json.loads(connection.getresponse().read())\n+print result\n+```\n+\n+The output may look like this:\n+```json\n+{ \"functionName\": \"sendMessage\" }\n+```\n+\n+## Delete trigger webhook\n+To delete a trigger webhook use the put method.\n+\n+```bash\n+curl -X PUT \\\n+  -H \"X-Parse-Application-Id: ${APPLICATION_ID}\" \\\n+  -H \"X-Parse-Master-Key: ${MASTER_KEY}\" \\\n+  -H \"Content-Type: application/json\" \\\n+  -d '{ \"__op\": \"Delete\" }' \\\n+https://api.parse.com/1/hooks/triggers/Game/beforeSave\n+```\n+```python\n+import json,httplib\n+connection = httplib.HTTPSConnection('api.parse.com', 443)\n+connection.connect()\n+connection.request('PUT', '/1/hooks/triggers/Game/beforeSave', json.dumps(\n+      {\"__op\": \"Delete\"}\n+      ), {\n+       \"X-Parse-Application-Id\": \"${APPLICATION_ID}\",\n+       \"X-Parse-Master-Key\": \"${MASTER_KEY}\",\n+       \"Content-Type\": \"application/json\"\n+     })\n+result = json.loads(connection.getresponse().read())\n+print result\n+```\n+\n+The output may look like this:\n+```json\n+{}\n+```\n+\n+If a cloud code trigger with the same name already exists then the it is returned as the result.","path":"en/rest/hooks.mdown","position":575,"original_position":575,"commit_id":"fbcf728c8aeae23350a3c56d5bcd01d8ca618e23","original_commit_id":"fbcf728c8aeae23350a3c56d5bcd01d8ca618e23","user":{"login":"stanleyw","id":2966902,"avatar_url":"https://avatars.githubusercontent.com/u/2966902?v=3","gravatar_id":"","url":"https://api.github.com/users/stanleyw","html_url":"https://github.com/stanleyw","followers_url":"https://api.github.com/users/stanleyw/followers","following_url":"https://api.github.com/users/stanleyw/following{/other_user}","gists_url":"https://api.github.com/users/stanleyw/gists{/gist_id}","starred_url":"https://api.github.com/users/stanleyw/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/stanleyw/subscriptions","organizations_url":"https://api.github.com/users/stanleyw/orgs","repos_url":"https://api.github.com/users/stanleyw/repos","events_url":"https://api.github.com/users/stanleyw/events{/privacy}","received_events_url":"https://api.github.com/users/stanleyw/received_events","type":"User","site_admin":false},"body":"Also add something like \"Since the overriding webhook was just deleted, this cloud code trigger will be run the next time a `Game` object is saved.\"","created_at":"2015-06-15T17:59:29Z","updated_at":"2015-06-15T17:59:29Z","html_url":"https://github.com/ParsePlatform/Docs/pull/92#discussion_r32448061","pull_request_url":"https://api.github.com/repos/ParsePlatform/Docs/pulls/92","_links":{"self":{"href":"https://api.github.com/repos/ParsePlatform/Docs/pulls/comments/32448061"},"html":{"href":"https://github.com/ParsePlatform/Docs/pull/92#discussion_r32448061"},"pull_request":{"href":"https://api.github.com/repos/ParsePlatform/Docs/pulls/92"}}},"pull_request":{"url":"https://api.github.com/repos/ParsePlatform/Docs/pulls/92","id":37419380,"html_url":"https://github.com/ParsePlatform/Docs/pull/92","diff_url":"https://github.com/ParsePlatform/Docs/pull/92.diff","patch_url":"https://github.com/ParsePlatform/Docs/pull/92.patch","issue_url":"https://api.github.com/repos/ParsePlatform/Docs/issues/92","number":92,"state":"open","locked":false,"title":"Create hooks.mdown","user":{"login":"pavanka","id":5722064,"avatar_url":"https://avatars.githubusercontent.com/u/5722064?v=3","gravatar_id":"","url":"https://api.github.com/users/pavanka","html_url":"https://github.com/pavanka","followers_url":"https://api.github.com/users/pavanka/followers","following_url":"https://api.github.com/users/pavanka/following{/other_user}","gists_url":"https://api.github.com/users/pavanka/gists{/gist_id}","starred_url":"https://api.github.com/users/pavanka/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pavanka/subscriptions","organizations_url":"https://api.github.com/users/pavanka/orgs","repos_url":"https://api.github.com/users/pavanka/repos","events_url":"https://api.github.com/users/pavanka/events{/privacy}","received_events_url":"https://api.github.com/users/pavanka/received_events","type":"User","site_admin":false},"body":"add documentation for the new hooks rest api","created_at":"2015-06-11T00:41:27Z","updated_at":"2015-06-15T17:59:30Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3e697a187b955665264901d1e1b3f68428b73ca2","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/ParsePlatform/Docs/pulls/92/commits","review_comments_url":"https://api.github.com/repos/ParsePlatform/Docs/pulls/92/comments","review_comment_url":"https://api.github.com/repos/ParsePlatform/Docs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ParsePlatform/Docs/issues/92/comments","statuses_url":"https://api.github.com/repos/ParsePlatform/Docs/statuses/fbcf728c8aeae23350a3c56d5bcd01d8ca618e23","head":{"label":"pavanka:docs","ref":"docs","sha":"fbcf728c8aeae23350a3c56d5bcd01d8ca618e23","user":{"login":"pavanka","id":5722064,"avatar_url":"https://avatars.githubusercontent.com/u/5722064?v=3","gravatar_id":"","url":"https://api.github.com/users/pavanka","html_url":"https://github.com/pavanka","followers_url":"https://api.github.com/users/pavanka/followers","following_url":"https://api.github.com/users/pavanka/following{/other_user}","gists_url":"https://api.github.com/users/pavanka/gists{/gist_id}","starred_url":"https://api.github.com/users/pavanka/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pavanka/subscriptions","organizations_url":"https://api.github.com/users/pavanka/orgs","repos_url":"https://api.github.com/users/pavanka/repos","events_url":"https://api.github.com/users/pavanka/events{/privacy}","received_events_url":"https://api.github.com/users/pavanka/received_events","type":"User","site_admin":false},"repo":{"id":37213437,"name":"Docs","full_name":"pavanka/Docs","owner":{"login":"pavanka","id":5722064,"avatar_url":"https://avatars.githubusercontent.com/u/5722064?v=3","gravatar_id":"","url":"https://api.github.com/users/pavanka","html_url":"https://github.com/pavanka","followers_url":"https://api.github.com/users/pavanka/followers","following_url":"https://api.github.com/users/pavanka/following{/other_user}","gists_url":"https://api.github.com/users/pavanka/gists{/gist_id}","starred_url":"https://api.github.com/users/pavanka/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pavanka/subscriptions","organizations_url":"https://api.github.com/users/pavanka/orgs","repos_url":"https://api.github.com/users/pavanka/repos","events_url":"https://api.github.com/users/pavanka/events{/privacy}","received_events_url":"https://api.github.com/users/pavanka/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/pavanka/Docs","description":"These are the markdown sources for all the platform guides of Parse.","fork":true,"url":"https://api.github.com/repos/pavanka/Docs","forks_url":"https://api.github.com/repos/pavanka/Docs/forks","keys_url":"https://api.github.com/repos/pavanka/Docs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pavanka/Docs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pavanka/Docs/teams","hooks_url":"https://api.github.com/repos/pavanka/Docs/hooks","issue_events_url":"https://api.github.com/repos/pavanka/Docs/issues/events{/number}","events_url":"https://api.github.com/repos/pavanka/Docs/events","assignees_url":"https://api.github.com/repos/pavanka/Docs/assignees{/user}","branches_url":"https://api.github.com/repos/pavanka/Docs/branches{/branch}","tags_url":"https://api.github.com/repos/pavanka/Docs/tags","blobs_url":"https://api.github.com/repos/pavanka/Docs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pavanka/Docs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pavanka/Docs/git/refs{/sha}","trees_url":"https://api.github.com/repos/pavanka/Docs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pavanka/Docs/statuses/{sha}","languages_url":"https://api.github.com/repos/pavanka/Docs/languages","stargazers_url":"https://api.github.com/repos/pavanka/Docs/stargazers","contributors_url":"https://api.github.com/repos/pavanka/Docs/contributors","subscribers_url":"https://api.github.com/repos/pavanka/Docs/subscribers","subscription_url":"https://api.github.com/repos/pavanka/Docs/subscription","commits_url":"https://api.github.com/repos/pavanka/Docs/commits{/sha}","git_commits_url":"https://api.github.com/repos/pavanka/Docs/git/commits{/sha}","comments_url":"https://api.github.com/repos/pavanka/Docs/comments{/number}","issue_comment_url":"https://api.github.com/repos/pavanka/Docs/issues/comments{/number}","contents_url":"https://api.github.com/repos/pavanka/Docs/contents/{+path}","compare_url":"https://api.github.com/repos/pavanka/Docs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pavanka/Docs/merges","archive_url":"https://api.github.com/repos/pavanka/Docs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pavanka/Docs/downloads","issues_url":"https://api.github.com/repos/pavanka/Docs/issues{/number}","pulls_url":"https://api.github.com/repos/pavanka/Docs/pulls{/number}","milestones_url":"https://api.github.com/repos/pavanka/Docs/milestones{/number}","notifications_url":"https://api.github.com/repos/pavanka/Docs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pavanka/Docs/labels{/name}","releases_url":"https://api.github.com/repos/pavanka/Docs/releases{/id}","created_at":"2015-06-10T17:59:40Z","updated_at":"2015-06-08T15:02:08Z","pushed_at":"2015-06-12T22:21:33Z","git_url":"git://github.com/pavanka/Docs.git","ssh_url":"git@github.com:pavanka/Docs.git","clone_url":"https://github.com/pavanka/Docs.git","svn_url":"https://github.com/pavanka/Docs","homepage":"https://parse.com/docs","size":2618,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"ParsePlatform:master","ref":"master","sha":"d5b0206379815258b11f73dea0d1d225fd34091a","user":{"login":"ParsePlatform","id":1294580,"avatar_url":"https://avatars.githubusercontent.com/u/1294580?v=3","gravatar_id":"","url":"https://api.github.com/users/ParsePlatform","html_url":"https://github.com/ParsePlatform","followers_url":"https://api.github.com/users/ParsePlatform/followers","following_url":"https://api.github.com/users/ParsePlatform/following{/other_user}","gists_url":"https://api.github.com/users/ParsePlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/ParsePlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ParsePlatform/subscriptions","organizations_url":"https://api.github.com/users/ParsePlatform/orgs","repos_url":"https://api.github.com/users/ParsePlatform/repos","events_url":"https://api.github.com/users/ParsePlatform/events{/privacy}","received_events_url":"https://api.github.com/users/ParsePlatform/received_events","type":"Organization","site_admin":false},"repo":{"id":31440605,"name":"Docs","full_name":"ParsePlatform/Docs","owner":{"login":"ParsePlatform","id":1294580,"avatar_url":"https://avatars.githubusercontent.com/u/1294580?v=3","gravatar_id":"","url":"https://api.github.com/users/ParsePlatform","html_url":"https://github.com/ParsePlatform","followers_url":"https://api.github.com/users/ParsePlatform/followers","following_url":"https://api.github.com/users/ParsePlatform/following{/other_user}","gists_url":"https://api.github.com/users/ParsePlatform/gists{/gist_id}","starred_url":"https://api.github.com/users/ParsePlatform/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ParsePlatform/subscriptions","organizations_url":"https://api.github.com/users/ParsePlatform/orgs","repos_url":"https://api.github.com/users/ParsePlatform/repos","events_url":"https://api.github.com/users/ParsePlatform/events{/privacy}","received_events_url":"https://api.github.com/users/ParsePlatform/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ParsePlatform/Docs","description":"These are the markdown sources for all the platform guides of Parse.","fork":false,"url":"https://api.github.com/repos/ParsePlatform/Docs","forks_url":"https://api.github.com/repos/ParsePlatform/Docs/forks","keys_url":"https://api.github.com/repos/ParsePlatform/Docs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ParsePlatform/Docs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ParsePlatform/Docs/teams","hooks_url":"https://api.github.com/repos/ParsePlatform/Docs/hooks","issue_events_url":"https://api.github.com/repos/ParsePlatform/Docs/issues/events{/number}","events_url":"https://api.github.com/repos/ParsePlatform/Docs/events","assignees_url":"https://api.github.com/repos/ParsePlatform/Docs/assignees{/user}","branches_url":"https://api.github.com/repos/ParsePlatform/Docs/branches{/branch}","tags_url":"https://api.github.com/repos/ParsePlatform/Docs/tags","blobs_url":"https://api.github.com/repos/ParsePlatform/Docs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ParsePlatform/Docs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ParsePlatform/Docs/git/refs{/sha}","trees_url":"https://api.github.com/repos/ParsePlatform/Docs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ParsePlatform/Docs/statuses/{sha}","languages_url":"https://api.github.com/repos/ParsePlatform/Docs/languages","stargazers_url":"https://api.github.com/repos/ParsePlatform/Docs/stargazers","contributors_url":"https://api.github.com/repos/ParsePlatform/Docs/contributors","subscribers_url":"https://api.github.com/repos/ParsePlatform/Docs/subscribers","subscription_url":"https://api.github.com/repos/ParsePlatform/Docs/subscription","commits_url":"https://api.github.com/repos/ParsePlatform/Docs/commits{/sha}","git_commits_url":"https://api.github.com/repos/ParsePlatform/Docs/git/commits{/sha}","comments_url":"https://api.github.com/repos/ParsePlatform/Docs/comments{/number}","issue_comment_url":"https://api.github.com/repos/ParsePlatform/Docs/issues/comments{/number}","contents_url":"https://api.github.com/repos/ParsePlatform/Docs/contents/{+path}","compare_url":"https://api.github.com/repos/ParsePlatform/Docs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ParsePlatform/Docs/merges","archive_url":"https://api.github.com/repos/ParsePlatform/Docs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ParsePlatform/Docs/downloads","issues_url":"https://api.github.com/repos/ParsePlatform/Docs/issues{/number}","pulls_url":"https://api.github.com/repos/ParsePlatform/Docs/pulls{/number}","milestones_url":"https://api.github.com/repos/ParsePlatform/Docs/milestones{/number}","notifications_url":"https://api.github.com/repos/ParsePlatform/Docs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ParsePlatform/Docs/labels{/name}","releases_url":"https://api.github.com/repos/ParsePlatform/Docs/releases{/id}","created_at":"2015-02-27T21:47:46Z","updated_at":"2015-06-15T03:57:13Z","pushed_at":"2015-06-13T19:46:09Z","git_url":"git://github.com/ParsePlatform/Docs.git","ssh_url":"git@github.com:ParsePlatform/Docs.git","clone_url":"https://github.com/ParsePlatform/Docs.git","svn_url":"https://github.com/ParsePlatform/Docs","homepage":"https://parse.com/docs","size":3819,"stargazers_count":44,"watchers_count":44,"language":null,"has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":35,"mirror_url":null,"open_issues_count":15,"forks":35,"open_issues":15,"watchers":44,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/ParsePlatform/Docs/pulls/92"},"html":{"href":"https://github.com/ParsePlatform/Docs/pull/92"},"issue":{"href":"https://api.github.com/repos/ParsePlatform/Docs/issues/92"},"comments":{"href":"https://api.github.com/repos/ParsePlatform/Docs/issues/92/comments"},"review_comments":{"href":"https://api.github.com/repos/ParsePlatform/Docs/pulls/92/comments"},"review_comment":{"href":"https://api.github.com/repos/ParsePlatform/Docs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ParsePlatform/Docs/pulls/92/commits"},"statuses":{"href":"https://api.github.com/repos/ParsePlatform/Docs/statuses/fbcf728c8aeae23350a3c56d5bcd01d8ca618e23"}}}}