usergrid-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sun...@apache.org
Subject [2/6] Changing document systems to Sphinx
Date Wed, 22 Oct 2014 16:17:59 GMT
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5ba3b73f/docs/_theme/sphinx_rtd_theme/static/fonts/fontawesome-webfont.ttf
----------------------------------------------------------------------
diff --git a/docs/_theme/sphinx_rtd_theme/static/fonts/fontawesome-webfont.ttf b/docs/_theme/sphinx_rtd_theme/static/fonts/fontawesome-webfont.ttf
new file mode 100755
index 0000000..e89738d
Binary files /dev/null and b/docs/_theme/sphinx_rtd_theme/static/fonts/fontawesome-webfont.ttf differ

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5ba3b73f/docs/_theme/sphinx_rtd_theme/static/fonts/fontawesome-webfont.woff
----------------------------------------------------------------------
diff --git a/docs/_theme/sphinx_rtd_theme/static/fonts/fontawesome-webfont.woff b/docs/_theme/sphinx_rtd_theme/static/fonts/fontawesome-webfont.woff
new file mode 100755
index 0000000..8c1748a
Binary files /dev/null and b/docs/_theme/sphinx_rtd_theme/static/fonts/fontawesome-webfont.woff differ

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5ba3b73f/docs/_theme/sphinx_rtd_theme/static/js/theme.js
----------------------------------------------------------------------
diff --git a/docs/_theme/sphinx_rtd_theme/static/js/theme.js b/docs/_theme/sphinx_rtd_theme/static/js/theme.js
new file mode 100755
index 0000000..60520cc
--- /dev/null
+++ b/docs/_theme/sphinx_rtd_theme/static/js/theme.js
@@ -0,0 +1,47 @@
+$( document ).ready(function() {
+    // Shift nav in mobile when clicking the menu.
+    $(document).on('click', "[data-toggle='wy-nav-top']", function() {
+      $("[data-toggle='wy-nav-shift']").toggleClass("shift");
+      $("[data-toggle='rst-versions']").toggleClass("shift");
+    });
+    // Close menu when you click a link.
+    $(document).on('click', ".wy-menu-vertical .current ul li a", function() {
+      $("[data-toggle='wy-nav-shift']").removeClass("shift");
+      $("[data-toggle='rst-versions']").toggleClass("shift");
+    });
+    $(document).on('click', "[data-toggle='rst-current-version']", function() {
+      $("[data-toggle='rst-versions']").toggleClass("shift-up");
+    });  
+    // Make tables responsive
+    $("table.docutils:not(.field-list)").wrap("<div class='wy-table-responsive'></div>");
+});
+
+window.SphinxRtdTheme = (function (jquery) {
+    var stickyNav = (function () {
+        var navBar,
+            win,
+            stickyNavCssClass = 'stickynav',
+            applyStickNav = function () {
+                if (navBar.height() <= win.height()) {
+                    navBar.addClass(stickyNavCssClass);
+                } else {
+                    navBar.removeClass(stickyNavCssClass);
+                }
+            },
+            enable = function () {
+                applyStickNav();
+                win.on('resize', applyStickNav);
+            },
+            init = function () {
+                navBar = jquery('nav.wy-nav-side:first');
+                win    = jquery(window);
+            };
+        jquery(init);
+        return {
+            enable : enable
+        };
+    }());
+    return {
+        StickyNav : stickyNav
+    };
+}($));

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5ba3b73f/docs/_theme/sphinx_rtd_theme/theme.conf
----------------------------------------------------------------------
diff --git a/docs/_theme/sphinx_rtd_theme/theme.conf b/docs/_theme/sphinx_rtd_theme/theme.conf
new file mode 100755
index 0000000..dcfbf8c
--- /dev/null
+++ b/docs/_theme/sphinx_rtd_theme/theme.conf
@@ -0,0 +1,8 @@
+[theme]
+inherit = basic
+stylesheet = css/theme.css
+
+[options]
+typekit_id = hiw1hhg
+analytics_id = 
+sticky_navigation = False

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5ba3b73f/docs/_theme/sphinx_rtd_theme/versions.html
----------------------------------------------------------------------
diff --git a/docs/_theme/sphinx_rtd_theme/versions.html b/docs/_theme/sphinx_rtd_theme/versions.html
new file mode 100755
index 0000000..8b3eb79
--- /dev/null
+++ b/docs/_theme/sphinx_rtd_theme/versions.html
@@ -0,0 +1,37 @@
+{% if READTHEDOCS %}
+{# Add rst-badge after rst-versions for small badge style. #}
+  <div class="rst-versions" data-toggle="rst-versions" role="note" aria-label="versions">
+    <span class="rst-current-version" data-toggle="rst-current-version">
+      <span class="fa fa-book"> Read the Docs</span>
+      v: {{ current_version }}
+      <span class="fa fa-caret-down"></span>
+    </span>
+    <div class="rst-other-versions">
+      <dl>
+        <dt>Versions</dt>
+        {% for slug, url in versions %}
+          <dd><a href="{{ url }}">{{ slug }}</a></dd>
+        {% endfor %}
+      </dl>
+      <dl>
+        <dt>Downloads</dt>
+        {% for type, url in downloads %}
+          <dd><a href="{{ url }}">{{ type }}</a></dd>
+        {% endfor %}
+      </dl>
+      <dl>
+        <dt>On Read the Docs</dt>
+          <dd>
+            <a href="//{{ PRODUCTION_DOMAIN }}/projects/{{ slug }}/?fromdocs={{ slug }}">Project Home</a>
+          </dd>
+          <dd>
+            <a href="//{{ PRODUCTION_DOMAIN }}/builds/{{ slug }}/?fromdocs={{ slug }}">Builds</a>
+          </dd>
+      </dl>
+      <hr/>
+      Free document hosting provided by <a href="http://www.readthedocs.org">Read the Docs</a>.
+
+    </div>
+  </div>
+{% endif %}
+

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5ba3b73f/docs/concepts/activity.md
----------------------------------------------------------------------
diff --git a/docs/concepts/activity.md b/docs/concepts/activity.md
new file mode 100644
index 0000000..b992f6a
--- /dev/null
+++ b/docs/concepts/activity.md
@@ -0,0 +1,1121 @@
+# Activity
+
+Most modern applications struggle to manage data streams, such as those
+that contain an ongoing list of comments, activities, and tweets. In
+particular, mobile applications are prone to generating very large
+amounts of data in a data stream. Beyond that, additions to a data
+stream must often be routed automatically to subscribers or filtered or
+counted.
+
+App services provides an activity entity that is specifically designed
+for data streams. An activity is an entity type that represents activity
+stream actions (see the [JSON Activity Streams 1.0
+specification](http://activitystrea.ms/specs/json/1.0/) for more
+information about these actions).
+
+When a user creates an activity, it creates a relationship between the
+activity and the user who created it. Because this relationship exists,
+the activity will appear in the feed of any of the user’s followers.
+Think of the Activities endpoint (/users/{uuid|username}/activities) as
+an "outbox" of news items created by the user. Think of the Feed
+endpoint (/users/{uuid|username}/feed) as an "inbox" of news items meant
+to be seen or consumed by the user.
+
+A user can also post an activity to a group (located at
+/groups/{uuid|groupname}/activities). This allows you to emulate
+Facebook-style group functionality, where a limited number of users can
+share content on a common "wall". In any of these cases, there is no
+need to construct publish/subscribe relationships manually.
+
+Activity entities are particularly useful in applications that enable
+users to post content to activity streams (also called feeds) and to
+display activity streams. Some examples of these applications are
+Twitter, foursquare, and Pinterest. For example, when a Twitter user
+posts a short, 140-character or less, "tweet", that activity gets added
+to the user's activity stream for display as well as to the activity
+streams of any of the user's followers.
+
+Using App services APIs you can create, retrieve, update, and delete
+activity entities. See You do not have access to view this node for
+descriptions of these APIs.
+
+**Note:** Although not shown in the API examples below, you need to
+provide a valid access token with each API call. See [Authenticating
+users and application
+clients](/authenticating-users-and-application-clients) for details.
+
+Creating an activity {dir="ltr"}
+--------------------
+
+Use the  POST method to create an activity in the activities collection.
+
+### Request URI
+
+POST /{org\_id}/{app\_id}/users/{uuid|username}/activities {request
+body}
+
+### Parameters
+
++--------------------------------------+--------------------------------------+
+| Parameter                            | Description                          |
++======================================+======================================+
+| arg uuid|string org\_id              | Organization UUID or organization    |
+|                                      | name                                 |
++--------------------------------------+--------------------------------------+
+| arg uuid|string app\_id              | Application UUID or application name |
++--------------------------------------+--------------------------------------+
+| request body                         | One or more sets of activity         |
+|                                      | properties:                          |
+|                                      |                                      |
+|                                      |     {                                |
+|                                      |       "actor":                       |
+|                                      |         {                            |
+|                                      |         "displayName":"John Doe",    |
+|                                      |         "uuid":"1f3567aa-da83-11e1-a |
+|                                      | fad-12313b01d5c1",                   |
+|                                      |         "username":"john.doe",       |
+|                                      |         "image":{                    |
+|                                      |           "duration":0,              |
+|                                      |           "height":80,               |
+|                                      |           "url":"http://www.gravatar |
+|                                      | .com/avatar/","width":80},           |
+|                                      |       "email":"john.doe@gmail.com"}, |
+|                                      |       "verb":"post",                 |
+|                                      |       "content":"Hello World!"       |
+|                                      |     }                                |
++--------------------------------------+--------------------------------------+
+
+### Example - Request
+
+-   [cURL](#curl_create_activity)
+-   [JavaScript (HTML5)](#javascript_create_activity)
+-   [Ruby](#ruby_create_activity)
+-   [Node.js](#nodejs_create_activity)
+
+<!-- -->
+
+    curl -X POST "https://api.usergrid.com/my-org/my-app/users/john.doe/activities" -d '{"actor":{"displayName":"John Doe","uuid":"1f3567aa-da83-11e1-afad-12313b01d5c1","username":"john.doe",
+    "image":{"duration":0,"height":80,"url":"http://www.gravatar.com/avatar/","width":80},
+    "email":"john.doe@gmail.com"},"verb":"post","content":"Hello World!"}'
+
+The example assumes use of the [JavaScript (HTML5)
+SDK](https://github.com/apigee/usergrid-javascript-sdk).
+
+    var options = {
+        method:'POST',
+        endpoint:'users/john.doe/activities',
+        body:{"actor":
+               {"displayName":"John Doe",
+                "uuid":"1f3567aa-da83-11e1-afad-12313b01d5c1",
+                "username":"john.doe",
+                "image":
+                 {"duration":0,
+                  "height":80,
+                  "url":"http://www.gravatar.com/avatar/",
+                  "width":80},
+                  "email":"john.doe@gmail.com"},
+                 "verb":"post",
+                 "content":"Hello World!"}
+    };
+    client.request(options, function (err, data) {
+        if (err) {
+            //error — POST failed
+        } else {
+            // success — POST worked. Data will contain raw results from API call        
+        }
+    });
+
+The example assumes use of the [Ruby
+SDK](https://github.com/scottganyo/usergrid_iron).
+
+    app = Usergrid::Application.new 'https://api.usergrid.com/my-org/my-app/'
+    app.create_activity { actor: { displayName: 'John Doe', uuid: '1f3567aa-da83-11e1-afad-12313b01d5c1', username: 'john.doe', image: { duration: 0, height: 80, url: 'http://www.gravatar.com/avatar/', width: 80 }, email: 'john.doe@gmail.com' }, verb: 'post', content: 'Hello World!' }
+
+The example assumes use of the [Node.js
+module](https://github.com/apigee/usergrid-node-module).
+
+    var options = {
+        method:'POST',
+        endpoint:'users/john.doe/activities',
+        body:{"actor":
+               {"displayName":"John Doe",
+                "uuid":"1f3567aa-da83-11e1-afad-12313b01d5c1",
+                "username":"john.doe",
+                "image":
+                 {"duration":0,
+                  "height":80,
+                  "url":"http://www.gravatar.com/avatar/",
+                  "width":80},
+                  "email":"john.doe@gmail.com"},
+                 "verb":"post",
+                 "content":"Hello World!"}
+    };
+    client.request(options, function (err, data) {
+        if (err) {
+            //error — POST failed
+        } else {
+            // success — POST worked. Data will contain raw results from API call        
+        }
+    });
+
+### Example - Response
+
+    {
+     "action" : "post",
+     "application" : "5111c463-6a42-11e1-b6dd-1231380a0284",
+     "params" : {
+     },
+     "path" : "/users/1f3567aa-da83-11e1-afad-12313b01d5c1/activities",
+     "uri" : "https://api.usergrid.com/5111c463-6a42-11e1-b6dd-1231380a0284/users/1f3567aa-da83-11e1-afad-12313b01d5c1/activities",
+     "entities" : [ {
+       "uuid" : "da448955-f3aa-11e1-8042-12313d331ae8",
+       "type" : "activity",
+       "created" : 1346445092974,
+       "modified" : 1346445092974,
+       "actor" : {
+         "displayName" : "John Doe",
+         "uuid" : "1f3567aa-da83-11e1-afad-12313b01d5c1",
+         "username" : "john.doe",
+         "image" : {
+           "duration" : 0,
+           "height" : 80,
+           "url" : "http://www.gravatar.com/avatar/",
+           "width" : 80
+         },
+         "email" : "john.doe@gmail.com"
+       },
+       "content" : "Hello World!",
+       "metadata" : {
+         "path" : "/users/1f3567aa-da83-11e1-afad-12313b01d5c1/activities/da448955-f3aa-11e1-8042-12313d331ae8"
+       },
+       "published" : 1346445092974,
+       "verb" : "post"
+     } ],
+     "timestamp" : 1346445092827,
+     "duration" : 1406,
+     "organization": "my-org",
+     "applicationName": "my-app"
+    }
+
+**Note:** Anytime a logged-in user makes a request, you can substitute
+"me" for the uuid or username. So the format of a request to create an
+activity for the currently logged-in user would look like this:
+
+POST /{org\_id}/{app\_id}/users/me/activities {request body}
+
+The users/me endpoint is accessible only if you provide an access token
+with the request. If you don't provide an access token with the request,
+that is, you make an anonymous (or "guest") call, the system will not be
+able to determine which user to return as /users/me.
+
+When you create an activity it creates a relationship between the
+activity and the user who created it. In other words, the newly created
+activity above belongs to john.doe. Another way of saying this is the
+user "owns" the activity. And because this relationship exists, the
+activity will appear in the feed of any of the user’s followers (in this
+example, anyone who is following john.doe). However, it will not appear
+in the feed of people the user follows. The activity is accessible at
+the /activites endpoint to users who have the permission to read that
+endpoint.
+
+Notice the properties specified in the request body in the previous
+example are *actor*, *verb*, and *content*. The *actor*, *verb*, and
+*content* properties are built into the Activity entity (see
+[System-defined activity properties](#properties)). The actor property
+specifies properties of the entity that performs the action (here, user
+john.doe). The gravatar URL is used to create an icon for the
+activity. And because an Activity is simply an Apache Usergrid entity, you
+can also create custom properties.
+
+The *verb* parameter is descriptive. You can use it to indicate what
+type of activity is posted, for example, an image versus text. The
+value*post* is defined in the JSON Activity Streams specification as
+“the act of authoring an object and then publishing it online.“
+
+Posting an activity to a group {dir="ltr"}
+------------------------------
+
+Use the POST method to post an activity to a specific group. In this
+case the activity is created in the activities collection and is
+accessible at the /activities endpoint to users who have the permission
+to read that endpoint. In addition, a relationship is established
+between the activity and the group, and because of that, the activity
+will appear in the group’s feed. The group "owns" the activity. Also,
+the activity will be published in the feed of all users that are members
+of the group.
+
+Request URI
+
+POST /{org\_id}/{app\_id}/groups/{uuid|groupname}/activities {request
+body}
+
+### Parameters
+
++--------------------------------------+--------------------------------------+
+| Parameter                            | Description                          |
++======================================+======================================+
+| arg uuid|string org\_id              | Organization UUID or organization    |
+|                                      | name                                 |
++--------------------------------------+--------------------------------------+
+| arg uuid|string app\_id              | Application UUID or application name |
++--------------------------------------+--------------------------------------+
+| arg uuid|string groupname            | UUID or name of the group            |
++--------------------------------------+--------------------------------------+
+| request body                         | One or more sets of activity         |
+|                                      | properties:                          |
+|                                      |                                      |
+|                                      |     {                                |
+|                                      |       "actor":                       |
+|                                      |         {                            |
+|                                      |         "displayName":"John Doe",    |
+|                                      |         "uuid":"1f3567aa-da83-11e1-a |
+|                                      | fad-12313b01d5c1",                   |
+|                                      |         "username":"john.doe",       |
+|                                      |         "image":{                    |
+|                                      |           "duration":0,              |
+|                                      |           "height":80,               |
+|                                      |           "url":"http://www.gravatar |
+|                                      | .com/avatar/","width":80},           |
+|                                      |       "email":"john.doe@gmail.com"}, |
+|                                      |       "verb":"post",                 |
+|                                      |       "content":"Hello World!"       |
+|                                      |     }                                |
++--------------------------------------+--------------------------------------+
+
+### Example - Request
+
+-   [cURL](#curl_post_activity_group)
+-   [JavaScript (HTML5)](#javascript_post_activity_group)
+-   [Ruby](#ruby_post_activity_group)
+-   [Node.js](#nodejs_post_activity_group)
+
+<!-- -->
+
+    curl -X POST "https://api.usergrid.com/my-org/my-app/groups/mygroup/activities" -d '{"actor":{"displayName":"John Doe","uuid":"1f3567aa-da83-11e1-afad-12313b01d5c1","username":"john.doe",
+    "image":{"duration":0,"height":80,"url":"http://www.gravatar.com/avatar/","width":80},
+    "email":"john.doe@gmail.com"},"verb":"post","content":"Hello World!"}'
+
+The example assumes use of the [JavaScript (HTML5)
+SDK](https://github.com/apigee/usergrid-javascript-sdk).
+
+    var options = {
+        method:'POST',
+        endpoint:'groups/mygroup/activities',
+        body:{"actor":
+               {"displayName":"John Doe",
+                "uuid":"1f3567aa-da83-11e1-afad-12313b01d5c1",
+                "username":"john.doe",
+                "image":
+                 {"duration":0,
+                  "height":80,
+                  "url":"http://www.gravatar.com/avatar/",
+                  "width":80},
+                  "email":"john.doe@gmail.com"},
+                 "verb":"post",
+                 "content":"Hello World!"}
+    };
+    client.request(options, function (err, data) {
+        if (err) {
+            //error — POST failed
+        } else {
+            //success — POST worked. Data will contain raw results from API call.        
+        }
+    });
+
+The example assumes use of the [Ruby
+SDK](https://github.com/scottganyo/usergrid_iron).
+
+    app = Usergrid::Application.new 'https://api.usergrid.com/my-org/my-app/'
+    app['groups/mygroup/activities'].post { actor:{ displayName: 'John Doe', uuid : '1f3567aa-da83-11e1-afad-12313b01d5c1', username: 'john.doe', image: { duration: 0, height: 80, url: 'http://www.gravatar.com/avatar/', width: 80 }, email: 'john.doe@gmail.com' }, verb: 'post', content: 'Hello World!' }
+
+The example assumes use of the [Node.js
+module](https://github.com/apigee/usergrid-node-module).
+
+    var options = {
+        method:'POST',
+        endpoint:'groups/mygroup/activities',
+        body:{"actor":
+               {"displayName":"John Doe",
+                "uuid":"1f3567aa-da83-11e1-afad-12313b01d5c1",
+                "username":"john.doe",
+                "image":
+                 {"duration":0,
+                  "height":80,
+                  "url":"http://www.gravatar.com/avatar/",
+                  "width":80},
+                  "email":"john.doe@gmail.com"},
+                 "verb":"post",
+                 "content":"Hello World!"}
+    };
+    client.request(options, function (err, data) {
+        if (err) {
+            //error — POST failed
+        } else {
+            //success — POST worked. Data will contain raw results from API call.        
+        }
+    });
+
+Because this relationship exists, this activity will appear in the feed
+of all users who are members of mygroup. It won't appear in the feeds of
+the group members’ followers or in feeds of users they follow.
+
+### Example - Response
+
+    {
+      "action": "post",
+      "application": "3400ba10-cd0c-11e1-bcf7-12313d1c4491",
+      "params":  {},
+      "path": "/groups/d87edec7-fc4d-11e1-9917-12313d1520f1/activities",
+      "uri": "https://api.usergrid.com/my-org/my-app/groups/d87edec7-fc4d-11e1-9917-12313d1520f1/activities",
+      "entities":  [
+         {
+          "uuid": "563f5d96-37f3-11e2-a0f7-02e81ae640dc",
+          "type": "activity",
+          "created": 1353952903811,
+          "modified": 1353952903811,
+          "actor":  {
+            "displayName": "John Doe",
+            "uuid": "1f3567aa-da83-11e1-afad-12313b01d5c1",
+            "username": "john.doe",
+            "image":  {
+              "duration": 0,
+              "height": 80,
+              "url": "http://www.gravatar.com/avatar/",
+              "width": 80
+            },
+            "email": "john.doe@gmail.com"
+          },
+          "content": "Hello World!",
+          "metadata":  {
+            "path": "/groups/d87edec7-fc4d-11e1-9917-12313d1520f1/activities/563f5d96-37f3-11e2-a0f7-02e81ae640dc"
+          },
+          "published": 1353952903811,
+          "verb": "post"
+        }
+      ],
+      "timestamp": 1353952903800,
+      "duration": 81,
+      "organization": "my-org",
+      "applicationName": "my-app"
+
+Creating an activity for a user's followers in a group {dir="ltr"}
+------------------------------------------------------
+
+Use the POST method to create an activity that will be published only in
+the feeds of users who (1) follow you, and (2) are in the same group to
+which you posted the activity. This is useful if you want to create
+specific groups of friends (for example, acquaintances or colleagues)
+and publish content to them with more precise privacy settings. This
+allows you to re-create a privacy model similar to Google+’s Circles or
+Facebook current privacy system.
+
+When you create an activity for a user’s followers in a group:
+
+-   The activity is accessible at the /activities endpoint to users who
+    have the permission to read that endpoint. The activity will not be
+    cross-posted to the group’s activity endpoint
+    (/groups/{uuid|groupname}/activities)
+-   A relationship is automatically created between the activity entity
+    that was just created and the user within that group
+    (/groups/{uuid|groupname}/users/{uuid|username})
+-   The user within the group
+    (/groups/{uuid|groupname}/users/{uuid|username}) becomes the owner
+    of the activity (through the owner property in the activity).
+
+### Request URI
+
+POST
+/{org\_id}/{app\_id}/groups/{uuid|groupname}/users/{uuid|username}/activities
+{request body}
+
+### Parameters
+
++--------------------------------------+--------------------------------------+
+| Parameter                            | Description                          |
++======================================+======================================+
+| arg uuid|string org\_id              | Organization UUID or organization    |
+|                                      | name                                 |
++--------------------------------------+--------------------------------------+
+| arg uuid|string app\_id              | Application UUID or application name |
++--------------------------------------+--------------------------------------+
+| arg uuid|string groupname            | UUID or name of the group            |
++--------------------------------------+--------------------------------------+
+| arg uuid|string username             | UUID or name of the user             |
++--------------------------------------+--------------------------------------+
+| request body                         | One or more sets of activity         |
+|                                      | properties:                          |
+|                                      |                                      |
+|                                      |     {                                |
+|                                      |       "actor":                       |
+|                                      |         {                            |
+|                                      |         "displayName":"John Doe",    |
+|                                      |         "uuid":"1f3567aa-da83-11e1-a |
+|                                      | fad-12313b01d5c1",                   |
+|                                      |         "username":"john.doe",       |
+|                                      |         "image":{                    |
+|                                      |           "duration":0,              |
+|                                      |           "height":80,               |
+|                                      |           "url":"http://www.gravatar |
+|                                      | .com/avatar/","width":80},           |
+|                                      |       "email":"john.doe@gmail.com"}, |
+|                                      |       "verb":"post",                 |
+|                                      |       "content":"Hello World!"       |
+|                                      |     }                                |
++--------------------------------------+--------------------------------------+
+
+### Example - Request
+
+-   [cURL](#curl_post_activity_user_group)
+-   [JavaScript (HTML5)](#javascript_post_activity_user_group)
+-   [Ruby](#ruby_post_activity_user_group)
+-   [Node.js](#nodejs_post_activity_user_group)
+
+<!-- -->
+
+    curl -X POST "https://api.usergrid.com/my-org/my-app/groups/mygroup/users/john.doe/activities" -d '{"actor":{"displayName":"John Doe","uuid":"1f3567aa-da83-11e1-afad-12313b01d5c1","username":"john.doe",
+    "image":{"duration":0,"height":80,"url":"http://www.gravatar.com/avatar/","width":80},
+    "email":"john.doe@gmail.com"},"verb":"post","content":"Hello World!"}'
+
+The example assumes use of the [JavaScript (HTML5)
+SDK](https://github.com/apigee/usergrid-javascript-sdk).
+
+    var options = {
+        method:'POST',
+        endpoint:'groups/mygroup/users/john.doe/activities',
+        body:{"actor":
+               {"displayName":"John Doe",
+                "uuid":"1f3567aa-da83-11e1-afad-12313b01d5c1",
+                "username":"john.doe",
+                "image":
+                 {"duration":0,
+                  "height":80,
+                  "url":"http://www.gravatar.com/avatar/",
+                  "width":80},
+                  "email":"john.doe@gmail.com"},
+                 "verb":"post",
+                 "content":"Hello World!"}
+    };
+    client.request(options, function (err, data) {
+        if (err) {
+            //error — POST failed
+        } else {
+            //success — POST worked. Data will contain raw results from API call.        
+        }
+    });
+
+The example assumes use of the [Ruby
+SDK](https://github.com/scottganyo/usergrid_iron).
+
+    app = Usergrid::Application.new 'https://api.usergrid.com/my-org/my-app/'
+    app['groups/mygroup/users/john.doe/activities'].post { actor:{ displayName: 'John Doe', uuid : '1f3567aa-da83-11e1-afad-12313b01d5c1', username: 'john.doe', image: { duration: 0, height: 80, url: 'http://www.gravatar.com/avatar/', width: 80 }, email: 'john.doe@gmail.com' }, verb: 'post', content: 'Hello World!' }
+
+The example assumes use of the [Node.js
+module](https://github.com/apigee/usergrid-node-module).
+
+    var options = {
+        method:'POST',
+        endpoint:'groups/mygroup/users/john.doe/activities',
+        body:{"actor":
+               {"displayName":"John Doe",
+                "uuid":"1f3567aa-da83-11e1-afad-12313b01d5c1",
+                "username":"john.doe",
+                "image":
+                 {"duration":0,
+                  "height":80,
+                  "url":"http://www.gravatar.com/avatar/",
+                  "width":80},
+                  "email":"john.doe@gmail.com"},
+                 "verb":"post",
+                 "content":"Hello World!"}
+    };
+    client.request(options, function (err, data) {
+        if (err) {
+            //error — POST failed
+        } else {
+            //success — POST worked. Data will contain raw results from API call.        
+        }
+    });
+
+Because this relationship exists, this activity will appear in the feed
+of all users who are members of mygroup. It won't appear in the feeds of
+the group members’ followers or in feeds of users they follow.
+
+### Example - Response
+
+    {
+      "action" : "post",
+      "application" : "3400ba10-cd0c-11e1-bcf7-12313d1c4491",
+      "params" : { },
+      "path" : "/groups/d87edec7-fc4d-11e1-9917-12313d1520f1/users/34e26bc9-2d00-11e2-a065-02e81ae640dc/activities",
+      "uri" : "https://api.usergrid.com/my-org/my-app/
+    /groups/d87edec7-fc4d-11e1-9917-12313d1520f1/users/34e26bc9-2d00-11e2-a065-02e81ae640dc/activities",
+      "entities" : [ {
+        "uuid" : "2440ca58-49ff-11e2-84c0-02e81adcf3d0",
+        "type" : "activity",
+        "created" : 1355937094825,
+        "modified" : 1355937094825,
+        "actor" : {
+          "displayName" : "John Doe",
+          "uuid" : "1f3567aa-da83-11e1-afad-12313b01d5c1",
+          "username" : "john.doe",
+          "image" : {
+            "duration" : 0,
+            "height" : 80,
+            "url" : "http://www.gravatar.com/avatar/",
+            "width" : 80
+          },
+          "email" : "john.doe@gmail.com"
+        },
+        "content" : "Happy New Year!",
+        "metadata" : {
+          "path" : "/groups/d87edec7-fc4d-11e1-9917-12313d1520f1/users/34e26bc9-2d00-11e2-a065-02e81ae640dc/activities/2440ca58-49ff-11e2-84c0-02e81adcf3d0"
+        },
+        "published" : 1355937094825,
+        "verb" : "post"
+      } ],
+      "timestamp" : 1355937094789,
+      "duration" : 95,
+      "organization" : "my-org",
+      "applicationName" : "my-app"
+
+Getting a user’s activities {dir="ltr"}
+---------------------------
+
+Use the GET method to retrieve a user’s activities. This returns the
+activities posted on the user (that is, to
+/users/{uuid|username}/activities), but not the activities of the people
+that user follows. To retrieve the user’s activities and activities of
+the users he follows, you need to get the user’s feed.
+
+### Request URI
+
+GET /{org\_id}/{app\_id}/users/{uuid|username}/activities
+
+### Parameters
+
+  Parameter                  Description
+  -------------------------- ----------------------------------------
+  arg uuid|string org\_id    Organization UUID or organization name
+  arg uuid|string app\_id    Application UUID or application name
+  arg uuid|string username   UUID or name of the user
+
+### Example - Request
+
+-   [cURL](#curl_get_user_activities)
+-   [JavaScript (HTML5)](#javascript_get_user_activities)
+-   [Ruby](#ruby_get_user_activities)
+-   [Node.js](#nodejs_get_user_activities)
+
+<!-- -->
+
+    curl -X GET "https://api.usergrid.com/my-org/my-app/users/john.doe/activities"
+
+The example assumes use of the [JavaScript (HTML5)
+SDK](https://github.com/apigee/usergrid-javascript-sdk).
+
+    var options = {
+        method:'GET',
+        endpoint:'users/john.doe/activities'
+    };
+    client.request(options, function (err, data) {
+        if (err) {
+            //error — GET failed
+        } else {
+            //success GET worked. Data will contain raw results from API call.       
+        }
+    });
+
+The example assumes use of the [Ruby
+SDK](https://github.com/scottganyo/usergrid_iron).
+
+    app = Usergrid::Application.new 'https://api.usergrid.com/my-org/my-app/'
+    app['users/john.doe/activities'].get
+
+The example assumes use of the [Node.js
+module](https://github.com/apigee/usergrid-node-module).
+
+    var options = {
+        method:'GET',
+        endpoint:'users/john.doe/activities'
+    };
+    client.request(options, function (err, data) {
+        if (err) {
+            //error — GET failed
+        } else {
+            //success GET worked. Data will contain raw results from API call.       
+        }
+    });
+
+### Example - Response
+
+    {
+      "action" : "get",
+      "application" : "3400ba10-cd0c-11e1-bcf7-12313d1c4491",
+      "params" : { },
+      "path" : "/users/5c0c1789-d503-11e1-b36a-12313b01d5c1/activities",
+      "uri" : "https://api.usergrid.com/my-org/my-app/users/5c0c1789-d503-11e1-b36a-12313b01d5c1/activities",
+      "entities" : [ {
+        "uuid" : "d57e5b00-37f1-11e2-a0f7-02e81ae640dc",
+        "type" : "activity",
+        "created" : 1353952258301,
+        "modified" : 1353952258301,
+        "actor" : {
+          "displayName" : "John Doe",
+          "image" : {
+            "duration" : 0,
+            "height" : 80,
+            "url" : "http://www.gravatar.com/avatar/",
+            "width" : 80
+          },
+          "uuid" : "1f3567aa-da83-11e1-afad-12313b01d5c1",
+          "email" : "john.doe@gmail.com",
+          "username" : "john.doe"
+        },
+        "content" : "Hello World!",
+        "metadata" : {
+          "path" : "/users/5c0c1789-d503-11e1-b36a-12313b01d5c1/activities/d57e5b00-37f1-11e2-a0f7-02e81ae640dc"
+        },
+        "published" : 1353952258301,
+        "verb" : "post"
+      }, 
+      "timestamp" : 1355933909077,
+      "duration" : 39,
+      "organization" : "my-org",
+      "applicationName" : "my-app"}
+
+Getting a group’s activities {dir="ltr"}
+----------------------------
+
+Use the GET method to retrieve a group’s activities. This returns the
+activities created on or by the group (that is, to
+/groups/{uuid|groupname}/activities), but not the activities of
+followers of group members. To retrieve the group’s activities and
+activities of followers, you need to get the group’s feed.
+
+### Request URI
+
+GET /{org\_id}/{app\_id}/groups/{uuid|groupname}/activities
+
+### Parameters
+
+  Parameter                   Description
+  --------------------------- ----------------------------------------
+  arg uuid|string org\_id     Organization UUID or organization name
+  arg uuid|string app\_id     Application UUID or application name
+  arg uuid|string groupname   UUID or name of the group
+
+### Example - Request
+
+-   [cURL](#curl_get_group_activities)
+-   [JavaScript (HTML5)](#javascript_get_group_activities)
+-   [Ruby](#ruby_get_group_activities)
+-   [Node.js](#nodejs_get_group_activities)
+
+<!-- -->
+
+    curl -X GET "https://api.usergrid.com/my-org/my-app/groups/mygroup/activities"
+
+The example assumes use of the [JavaScript (HTML5)
+SDK](https://github.com/apigee/usergrid-javascript-sdk).
+
+    var options = {
+        method:'GET',
+        endpoint:'groups/mygroup/activities'
+    };
+    client.request(options, function (err, data) {
+        if (err) {
+            //error — GET failed
+        } else {
+            //success GET worked. Data will contain raw results from API call.       
+        }
+    });
+
+The example assumes use of the [Ruby
+SDK](https://github.com/scottganyo/usergrid_iron).
+
+    app = Usergrid::Application.new 'https://api.usergrid.com/my-org/my-app/'
+    app['groups/mygroup/activities'].get
+
+The example assumes use of the [Node.js
+module](https://github.com/apigee/usergrid-node-module).
+
+    var options = {
+        method:'GET',
+        endpoint:'groups/mygroup/activities'
+    };
+    client.request(options, function (err, data) {
+        if (err) {
+            //error — GET failed
+        } else {
+            //success GET worked. Data will contain raw results from API call.       
+        }
+    });
+
+### Example - Response
+
+    {
+      "action" : "get",
+      "application" : "3400ba10-cd0c-11e1-bcf7-12313d1c4491",
+      "params" : { },
+      "path" : "/groups/d87edec7-fc4d-11e1-9917-12313d1520f1/activities",
+      "uri" : "https://api.usergrid.com/my-org/my-app//groups/d87edec7-fc4d-11e1-9917-12313d1520f1/activities",
+      "entities" : [ {
+        "uuid" : "e7a47a41-4310-11e2-8861-02e81adcf3d0",
+        "type" : "activity",
+        "created" : 1355175065939,
+        "modified" : 1355175065939,
+        "actor" : {
+          "displayName" : "Martin Smith",
+          "id" : "tag:example.org,2011:martin",
+          "image" : {
+            "duration" : 0,
+            "height" : 250,
+            "url" : "http://example.org/martin/image",
+            "width" : 250
+          },
+          "objectType" : "person",
+          "url" : "http://example.org/martin"
+        },
+        "metadata" : {
+          "path" : "/groups/d87edec7-fc4d-11e1-9917-12313d1520f1/activities/e7a47a41-4310-11e2-8861-02e81adcf3d0"
+        },
+        "object" : {
+          "id" : "tag:example.org,2011:abc123/xyz",
+          "url" : "http://example.org/blog/2011/02/entry"
+        },
+        "published" : 1355175065939,
+        "target" : {
+          "url" : "http://example.org/blog/",
+          "objectType" : "blog",
+          "id" : "tag:example.org,2011:abc123",
+          "displayName" : "Martin's Blog"
+        },
+        "verb" : "post"
+      }, {
+        "uuid" : "563f5d96-37f3-11e2-a0f7-02e81ae640dc",
+        "type" : "activity",
+        "created" : 1353952903811,
+        "modified" : 1353952903811,
+        "actor" : {
+          "displayName" : "John Doe",
+          "image" : {
+            "duration" : 0,
+            "height" : 80,
+            "url" : "http://www.gravatar.com/avatar/",
+            "width" : 80
+          },
+          "uuid" : "1f3567aa-da83-11e1-afad-12313b01d5c1",
+          "email" : "john.doe@gmail.com",
+          "username" : "john.doe"
+        },
+        "content" : "Hello World!",
+        "metadata" : {
+          "path" : "/groups/d87edec7-fc4d-11e1-9917-12313d1520f1/activities/563f5d96-37f3-11e2-a0f7-02e81ae640dc"
+        },
+        "published" : 1353952903811,
+        "verb" : "post"
+      } ],
+      "timestamp" : 1355934203039,
+      "duration" : 141,
+      "organization" : "my-org",
+      "applicationName" : "my-app"
+    }
+
+Getting a user’s feed {dir="ltr"}
+---------------------
+
+Use the GET method to retrieve a user’s feed.
+
+### Request URI
+
+GET /{org\_id}/{app\_id}/users/{uuid|username}/feed
+
+### Parameters
+
+  Parameter                  Description
+  -------------------------- ----------------------------------------
+  arg uuid|string org\_id    Organization UUID or organization name
+  arg uuid|string app\_id    Application UUID or application name
+  arg uuid|string username   UUID or name of the user
+
+### Example - Request
+
+-   [cURL](#curl_get_user_feed)
+-   [JavaScript (HTML5)](#javascript_get_user_feed)
+-   [Ruby](#ruby_get_user_feed)
+-   [Node.js](#nodejs_get_user_feed)
+
+<!-- -->
+
+    curl -X GET "https://api.usergrid.com/my-org/my-app/users/john.doe/feed"
+
+The example assumes use of the [JavaScript (HTML5)
+SDK](https://github.com/apigee/usergrid-javascript-sdk).
+
+    var options = {
+        method:'GET',
+        endpoint:'users/john.doe/feed'
+    };
+    client.request(options, function (err, data) {
+        if (err) {
+            //error — GET failed
+        } else {
+            //success GET worked. Data will contain raw results from API call.       
+        }
+    });
+
+The example assumes use of the [Ruby
+SDK](https://github.com/scottganyo/usergrid_iron).
+
+    app = Usergrid::Application.new 'https://api.usergrid.com/my-org/my-app/'
+    app['users/john.doe/feed'].get
+
+The example assumes use of the [Node.js
+module](https://github.com/apigee/usergrid-node-module).
+
+    var options = {
+        method:'GET',
+        endpoint:'users/john.doe/feed'
+    };
+    client.request(options, function (err, data) {
+        if (err) {
+            //error — GET failed
+        } else {
+            //success GET worked. Data will contain raw results from API call.       
+        }
+    });
+
+### Example - Response
+
+    {
+      "action" : "get",
+      "application" : "5111c463-6a42-11e1-b6dd-1231380a0284",
+      "params" : {
+        "_" : [ "1346438183429" ]
+      },
+      "path" : "/users/1f3567aa-da83-11e1-afad-12313b01d5c1/feed",
+      "uri" : "https://api.usergrid.com/5111c463-6a42-11e1-b6dd-1231380a0284/users/1f3567aa-da83-11e1-afad-12313b01d5c1/feed",
+      "entities" : [ {
+        "uuid" : "ffd79647-f399-11e1-aec3-12313b06ae01",
+        "type" : "activity",
+        "created" : 1346437854569,
+        "modified" : 1346437854569,
+        "actor" : {
+          "displayName" : "John Doe",
+          "image" : {
+            "duration" : 0,
+            "height" : 80,
+            "url" : "http://www.gravatar.com/avatar/",
+            "width" : 80
+          },
+          "uuid" : "1f3567aa-da83-11e1-afad-12313b01d5c1",
+          "email" : "john.doe@gmail.com",
+          "username" : "john.doe"
+        },
+        "content" : "Hello World!",
+        "metadata" : {
+          "cursor" : "gGkAAQMAgGkABgE5ffM1aQCAdQAQ_9eWR_OZEeGuwxIxOwauAQCAdQAQABlaOvOaEeGuwxIxOwauAQA",
+          "path" : "/users/1f3567aa-da83-11e1-afad-12313b01d5c1/feed/ffd79647-f399-11e1-aec3-12313b06ae01"
+        },
+        "published" : 1346437854569,
+        "verb" : "post"
+      }, {
+        "uuid" : "2482a1c5-e7d0-11e1-96f6-12313b06d112",
+        "type" : "activity",
+        "created" : 1345141694958,
+        "modified" : 1345141694958,
+        "actor" : {
+          "displayName" : "moab",
+          "image" : {
+            "duration" : 0,
+            "height" : 80,
+            "url" : "http://www.gravatar.com/avatar/",
+            "width" : 80
+          },
+          "uuid" : "1f3567aa-da83-11e1-afad-12313b01d5c1",
+          "email" : "massoddb@mfdsadfdsaoabl.com",
+          "username" : "moab"
+        },
+        "content" : "checking in code left and right!!",
+        "metadata" : {
+          "cursor" : "gGkAAQMAgGkABgE5MLFh7gCAdQAQJIKhxefQEeGW9hIxOwbREgCAdQAQJNEP6ufQEeGW9hIxOwbREgA",
+          "path" : "/users/1f3567aa-da83-11e1-afad-12313b01d5c1/feed/2482a1c5-e7d0-11e1-96f6-12313b06d112"
+        },
+        "published" : 1345141694958,
+        "verb" : "post"
+      } ],
+      "timestamp" : 1346438331316,
+      "duration" : 144,
+      "organization": "my-org",
+      "applicationName": "my-app"
+    }
+
+When a user creates an activity, a relationship is established between
+the activity and the user who created it. The activities in the user’s
+feed are based on this relationship as well as  any following
+relationships that the user has, and any groups in which the user
+belongs. So when a user asks to get his feed, what he gets is a list of
+(1) all the activities that the user owns, (2) all the activities posted
+by any users this user is following, and (3) any activities owned by any
+groups in which this user belongs.
+
+The user john.doe’s feed includes activities posted by user moab because
+john.doe follows moab.
+
+Getting a group’s feed {dir="ltr"}
+----------------------
+
+Use the GET method to retrieve the feed for a group. This gets a list of
+all the activities that have been posted to this group, that is, the
+activities for which this group has a relationship (owns).
+
+### Request URI
+
+GET /{org\_id}/{app\_id}/groups/{uuid|groupname}/feed
+
+### Parameters
+
+  Parameter                   Description
+  --------------------------- ----------------------------------------
+  arg uuid|string org\_id     Organization UUID or organization name
+  arg uuid|string app\_id     Application UUID or application name
+  arg uuid|string groupname   UUID or name of the group
+
+### Example - Request
+
+-   [cURL](#curl_get_group_feed)
+-   [JavaScript (HTML5)](#javascript_get_group_feed)
+-   [Ruby](#ruby_get_group_feed)
+-   [Node.js](#nodejs_get_group_feed)
+
+<!-- -->
+
+    curl -X GET "https://api.usergrid.com/my-org/my-app/groups/mygroup/feed"
+
+The example assumes use of the [JavaScript (HTML5)
+SDK](https://github.com/apigee/usergrid-javascript-sdk).
+
+    var options = {
+        method:'GET',
+        endpoint:'groups/mygroup/feed'
+    };
+    client.request(options, function (err, data) {
+        if (err) {
+            //error — GET failed
+        } else {
+            //success — GET worked. Data will contain raw results from API call.        
+        }
+    });
+
+The example assumes use of the [Ruby
+SDK](https://github.com/scottganyo/usergrid_iron).
+
+    app = Usergrid::Application.new 'https://api.usergrid.com/my-org/my-app/'
+    app['groups/mygroup/feed'].get
+
+The example assumes use of the [Node.js
+module](https://github.com/apigee/usergrid-node-module).
+
+    var options = {
+        method:'GET',
+        endpoint:'groups/mygroup/feed'
+    };
+    client.request(options, function (err, data) {
+        if (err) {
+            //error — GET failed
+        } else {
+            //success — GET worked. Data will contain raw results from API call.        
+        }
+    });
+
+### Example - Response
+
+    {
+        "action": "get",
+        "application": "3400ba10-cd0c-11e1-bcf7-12313d1c4491",
+        "params":  {},
+        "path": "/groups/d87edec7-fc4d-11e1-9917-12313d1520f1/feed",
+        "uri": "https://api.usergrid.com/my-org/my-app/groups/d87edec7-fc4d-11e1-9917-12313d1520f1/feed",
+        "entities":  [
+           {
+            "uuid": "563f5d96-37f3-11e2-a0f7-02e81ae640dc",
+            "type": "activity",
+            "created": 1353952903811,
+            "modified": 1353952903811,
+            "actor":  {
+              "displayName": "John Doe",
+              "image":  {
+                "duration": 0,
+                "height": 80,
+                "url": "http://www.gravatar.com/avatar/",
+                "width": 80
+              },
+              "uuid": "1f3567aa-da83-11e1-afad-12313b01d5c1",
+              "email": "john.doe@gmail.com",
+            "username": "john.doe"
+            },
+              "content": "Hello World!",
+              "metadata":  {
+                "cursor": "gGkAAQMAgGkABgE7PeHCgwCAdQAQVj9dljfzEeKg9wLoGuZA3ACAdQAQVkVRCTfzEeKg9wLoGuZA3AA",
+                "path": "/groups/d87edec7-fc4d-11e1-9917-12313d1520f1/feed/563f5d96-37f3-11e2-a0f7-02e81ae640dc"
+              },
+              "published": 1353952903811,
+              "verb": "post"
+            }
+          ],
+      "timestamp": 1353953272756,
+      "duration": 29,
+      "organization": "my-org",
+      "applicationName": "my-app"
+
+Activity properties
+-------------------
+
+The following are the system-defined properties for activity entities.
+You can create application-specific properties for an activity entity in
+addition to the system-defined properties. The system-defined properties
+are reserved. You cannot use these names to create other properties for
+an activity entity. In addition the activities name is reserved for the
+activities collection — you can't use it to name another collection.
+
+  Property    Type             Description
+  ----------- ---------------- ------------------------------------------------------------------------------------------------------------------------------------------
+  uuid        UUID             Activity’s unique entity ID
+  type        string           "activity"
+  created     long             [UNIX timestamp](http://en.wikipedia.org/wiki/Unix_time) of entity creation
+  modified    long             [UNIX timestamp](http://en.wikipedia.org/wiki/Unix_time) of entity modification
+  actor       ActivityObject   Entity that performs the action of the activity (see [JSON Activity Streams 1.0 specification](http://activitystrea.ms/specs/json/1.0/))
+  content     string           Description of the activity
+  icon        MediaLink        Visual representation of a media link resource (see [JSON Activity Streams 1.0 specification](http://activitystrea.ms/specs/json/1.0/))
+  category    string           Category used to organize activities
+  verb        string           Action that the actor performs (for example, *post*)
+  published   long             [UNIX timestamp](http://en.wikipedia.org/wiki/Unix_time) when the activity was published
+  object      ActivityObject   Object on which the action is performed (see [JSON Activity Streams 1.0 specification](http://activitystrea.ms/specs/json/1.0/))
+  title       string           Title or headline for the activity
+
+Set property 
+-------------
+
+Activities have the following set property.
+
+  Set           Type     Description
+  ------------- -------- -------------------------------------
+  connections   string   Set of connections for the activity
+
+ 
+
+Sample app
+----------
+
+The Messagee sample app is a simple Twitter-style messaging application
+that leverages the activity stream functionality of App services. The
+source for the application is available in HTML5 (JavaScript), iOS, and
+Android. You can download the source from github at:
+
+-   [https://github.com/apigee/usergrid-sample-html5-messagee](https://github.com/apigee/usergrid-sample-html5-messagee)
+     (HTML5)
+-   [https://github.com/apache/incubator-usergrid-sample-ios-messagee](https://github.com/apache/incubator-usergrid-sample-ios-messagee)
+    (iOS)
+-   [https://github.com/apigee/usergrid-sample-android-messagee](https://github.com/apigee/usergrid-sample-android-messagee)
+    (Android)
+

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5ba3b73f/docs/concepts/applications.md
----------------------------------------------------------------------
diff --git a/docs/concepts/applications.md b/docs/concepts/applications.md
new file mode 100644
index 0000000..262ef2b
--- /dev/null
+++ b/docs/concepts/applications.md
@@ -0,0 +1,78 @@
+# Applications
+
+You can create a new application in an organization through the [Admin
+portal](/admin-portal). The Admin portal creates the new application by
+issuing a post against the management endpoint (see the "Creating an
+organization application" section in [Organization](/organization) for
+details). If you need to create an application programmatically in your
+app, you can also use the API to do this. You can access application
+entities using your app name or UUID, prefixed with the organization
+name or UUID:
+
+[https://api.usergrid.com](http://api.usergrid.com/)/{org\_name|uuid}/{app\_name|uuid}
+
+Most mobile apps never access the application entity directly. For
+example you might have a server-side web app that accesses the
+application entity for configuration purposes. If you want to access
+your application entity programmatically, you can use the API.
+
+### Application properties
+
+The following are the system-defined properties for application
+entities. You can create application-specific properties for an
+application entity in addition to the system-defined properties. The
+system-defined properties are reserved. You cannot use these names to
+create other properties for an application entity. In addition the
+applications name is reserved for the applications collection — you
+can't use it to name another collection.
+
+The look-up properties for the entities of type application are uuid and
+name, that is, you can use the uuid and name properties to reference an
+application entity in an API call. However, you can search on a role
+using any property of the application entity. See [Queries and
+parameters](/queries-and-parameters) for details on searching.
+
+  Property                                Type      Description
+  --------------------------------------- --------- ---------------------------------------------------------------------------------
+  uuid                                    UUID      Application’s unique entity ID
+  type                                    string    "application"
+  created                                 long      [UNIX timestamp](http://en.wikipedia.org/wiki/Unix_time) of entity creation
+  modified                                long      [UNIX timestamp](http://en.wikipedia.org/wiki/Unix_time) of entity modification
+  name                                    string    Application name (mandatory)
+  title                                   string    Application title
+  description                             string    Application description
+  activated                               boolean   Whether application is activated
+  disabled                                boolean   Whether application is administratively disabled
+  allowOpenRegistration                   boolean   Whether application allows any user to register
+  registrationRequiresEmailConfirmation   boolean   Whether registration requires email confirmation
+  registrationRequiresAdminApproval       boolean   Whether registration requires admin approval
+  accesstokenttl                          long      Time to live value for an access token obtained within the application
+
+### Set properties
+
+The set properties for applications are listed in the table below.
+
+  Set              Type     Description
+  ---------------- -------- ----------------------------------------------------
+  collections      string   Set of collections
+  rolenames        string   Set of roles assigned to an application
+  counters         string   Set of counters assigned to an application
+  oauthproviders   string   Set of OAuth providers for the application
+  credentials      string   Set of credentials required to run the application
+
+### Collections
+
+The collections for applications are listed in the table below.
+
+  Collection      Type           Description
+  --------------- -------------- ----------------------------------------------------------------------------------
+  users           user           Collection of users
+  groups          group          Collection of groups
+  folders         folder         Collection of assets that represent folder-like objects
+  events          event          Collection of events posted by the application
+  assets          asset          Collection of assets that represent file-like objects
+  activities      activity       Collection of activity stream actions
+  devices         device         Collection of devices in the service
+  notifiers       notifier       Collection of notifiers used for push notifications
+  notifications   notification   Collection of push notifications that have been sent or are scheduled to be sent
+  receipts        receipt        Collection of receipts from push notifications that were sent
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5ba3b73f/docs/concepts/assets.md
----------------------------------------------------------------------
diff --git a/docs/concepts/assets.md b/docs/concepts/assets.md
new file mode 100644
index 0000000..ea7291c
--- /dev/null
+++ b/docs/concepts/assets.md
@@ -0,0 +1,20 @@
+# Assets
+
+Asset entities are used primarily in Apache Usergrid to manage binary data
+objects such as images, video, and audio content. However, an asset does
+not have to be used for a binary object. For example, assets can be used
+to model a file system.
+
+
+  Property       Type     Description
+  -------------- -------- ---------------------------------------------------------------------------------
+  uuid           UUID     Asset’s unique entity ID
+  type           string   "asset"
+  name           string   Asset name (mandatory)
+  created        long     [UNIX timestamp](http://en.wikipedia.org/wiki/Unix_time) of entity creation
+  modified       long     [UNIX timestamp](http://en.wikipedia.org/wiki/Unix_time) of entity modification
+  owner          UUID     UUID of the asset’s owner (mandatory)
+  path           string   Relative path to the asset (mandatory)
+  content-type   string   Content type of the asset (for example, “image/jpeg”)
+
+ 

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5ba3b73f/docs/concepts/collections.md
----------------------------------------------------------------------
diff --git a/docs/concepts/collections.md b/docs/concepts/collections.md
new file mode 100644
index 0000000..2a3e289
--- /dev/null
+++ b/docs/concepts/collections.md
@@ -0,0 +1,21 @@
+# Collections
+
+In Apache Usergrid, all entities are automatically associated with a corresponding
+collection based on the `type` property of the entity. You may create
+empty collections if you wish, but creating an entity of a new type will
+automatically create a corresponding collection for you. For example,
+creating a new custom "item" entity, creates an "items" collection.
+
+Queries are always limited in scope to the current collection. That should be your primary consideration for data modeling in Apache Usergrid.
+
+The following collections are reserved in the system
+
+* users
+* groups
+* activities
+* devices
+* assets
+* folders
+* queues
+* events
+* counters
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5ba3b73f/docs/concepts/events-and-counters.md
----------------------------------------------------------------------
diff --git a/docs/concepts/events-and-counters.md b/docs/concepts/events-and-counters.md
new file mode 100644
index 0000000..1d6cdcd
--- /dev/null
+++ b/docs/concepts/events-and-counters.md
@@ -0,0 +1,268 @@
+# Events and counters
+
+Events are typically used for application logging. For example, they
+could be used to log error messages that a system administrator might
+review at a later time. The event mechanism is optimized to handle large
+numbers of events, so it is an ideal mechanism for logging in your
+application.
+
+You can link events to specific users, groups, or custom-defined
+categories. When created with these links, events offer a powerful tool
+for running highly targeted, custom reports.
+
+Events are also the primary way to store custom counter data for
+analytics. See Counters (below) for further details.
+
+
+Event properties
+----------------
+
+You can pass various system-defined properties for an event. For
+example, you can specify a user property, with a uuid as its value. This
+will link the event to the user and can be used to query against the
+events queue (see Categorization below). The same is true for the group
+property. Pass it with a uuid as the value and the event will be linked
+to the group. To include a uuid of a user or group, add the uuid to the
+request body, for example:
+
+    POST https://api.usergrid.com/my-org/my-app/events {"timestamp":0, "category" : "advertising", "counters" :  {"ad_clicks" : 5},"user" : "1234891-477d-11e1-b2bd-22005a1c4e22", "group" : "75577d891-347d-2231-b5bd-23400a1c4e22"}
+
+The response body would look something like this:
+
+    {
+     "action": "post",
+     "application": "7fb8d891-477d-11e1-b2bd-22000a1c4e22",
+     "params": {},
+     "path": "/events",
+     "uri": "https://api.usergrid.com/22000a1c4e22-7fb8d891-477d-11e1-b2bd/7fb8d891-477d-11e1-b2bd-22000a1c4e22/events",
+     "entities": [
+       {
+         "uuid": "ce07ea3c-68b5-11e1-a586-9227e40e3559",
+         "user": "1234891-477d-11e1-b2bd-22005a1c4e22",
+         "group": "75577d891-347d-2231-b5bd-23400a1c4e22",
+         "type": "event",
+         "created": 1331166585282,
+         "modified": 1331166585282,
+         "counters": {
+           "ad_clicks": 5
+         },
+         "metadata": {
+           "path": "/events/ce07ea3c-68b5-11e1-a586-9227e40e3559"
+         },
+         "timestamp": 1331166585282
+       }
+     ],
+     "timestamp": 1331166585018,
+     "duration": 919,
+     "organization": "my-org",
+     "applicationName": "my-app"
+    }
+
+You can also create application-specific event properties in addition to
+these predefined properties. The system-defined properties are reserved.
+You cannot use these names to create other properties for an event
+entity. In addition the events name is reserved for the events
+collection — you can't use it to name another collection.
+
+The System-defined properties are as follows:
+
+  Property    Type     Description
+  ----------- -------- -------------------------------------------------------------------------------------------
+  uuid        UUID     Event’s unique entity ID
+  type        String   "event"
+  created     long     [UNIX timestamp](http://en.wikipedia.org/wiki/Unix_time) of entity creation
+  modified    long     [UNIX timestamp](http://en.wikipedia.org/wiki/Unix_time) of entity modification
+  timestamp   long     [UNIX timestamp](http://en.wikipedia.org/wiki/Unix_time) of application event (mandatory)
+  user        UUID     UUID of application user that posted the event
+  group       UUID     UUID of application group that posted the event
+  category    string   Category used for organizing similar events
+  counters    map      Counter used for tracking number of similar events
+  message     string   Message describing event
+
+### Categorizing events
+
+As mentioned previously, you can link an event to a user or a group using a standard [Relationship](/docs/relationships).
+This enables you to categorize and qualify event data for use in
+tracking and analysis. For example, linking events to users and groups,
+enables you to track how often people use a feature. Not only can you
+determine the total number of users that used the feature, but also
+which groups contain users that made the most use of the feature. Or,
+you could provide a location with the event, so you could see how often
+a feature was used by people in San Francisco versus Los Angeles.
+
+Counters
+--------
+
+User-defined counters are used in conjunction with events to keep
+statistics on many aspects of an application. User-defined counters are
+JSON objects that are added to events when they are posted. The act of
+posting an event increments the counter. Once created, user-defined
+counters can be used to get reports.
+
+**Note:** It may take up to 30 seconds for a counter to be updated.
+
+### User-Defined Counters
+
+With Apache Usergrid, you can define your own counters. Some of the things
+that you might track with a user-defined counter are:
+
+-   How many times people click on the help button in your application.
+-   How many times your game is played each day.
+-   How many times your banner ads are clicked each day.
+
+You can choose any name for a user-defined counter. For example, the
+counter for the help button might be named “help\_button” or
+“help\_button\_clicks”.
+
+To create a user-defined counter, you post to the events collection and
+specify the name and increment value of the counter in the request body.
+The increment value is the value that the counter is incremented by for
+each tracked event. An increment value of 1, means that the counter is
+increment by 1 for each tracked event. You could also specify a higher
+increment value, such as 15, which would increment the value by that
+number, or a negative number, which would decrement the value.  You can
+also reset the value of the counter, by specifying an increment value of
+0.
+
+When a counter is incremented by an event, there will be a 20-30 second
+delay between when the event is posted and when the counter is
+incremented. 
+
+As an example, here's how to create a user-defined counter named
+“button\_clicks” with an increment value of 1:
+
+    POST https://api.usergrid.com/my-org/my-app/events {"counters" : {"button_clicks" : 1},"timestamp" : "0"}
+
+The response body would look something like this:
+
+    {
+       "action": "post",
+       "path": "/events",
+       "uri": "http://api.usergrid.com/438a1ca1-cf9b-11e0-bcc1-12313f0204bb/events",
+       "entities": [
+           {
+               "uuid": "39d41c46-d8e4-11e0-bcc1-12313f0204bb",
+               "type": "event",
+               "timestamp": 1315353555546016,
+               "category":"advertising",
+               "counters": {
+                   "button_clicks": 1
+               },
+               "created": 1315353555546016,
+               "modified": 1315353555546016,
+               "metadata": {
+               "path": "/events/39d41c46-d8e4-11e0-bcc1-12313f0204bb"
+               }
+           }
+       ],
+       "timestamp": 1315353555537,
+       "duration": 110,
+       "organization": "my-org",
+       "applicationName": "my-app"
+    }
+
+### Counter hierarchy
+
+Counters are hierarchical in their structure and in the way they are
+incremented. Each level of the hierarchy is separated by the dot “.”
+operator. The hierarchical structure can be useful if you want to store
+or view statistics in a hierarchical way. For example, suppose you want
+to log errors that your app generates. One way to do this, is to fire an
+event every time an error occurs, by creating a counter called “errors”.
+However, you can get more detail by adding additional parameters to the
+counter. Imagine that you want to track errors in a specific module and
+function within that module, say module\_1, function\_1, you could use a
+counter like this:
+
+    errors.module_1.function_1
+
+And then for a different function in the same module:
+
+    errors.module_1.function_2
+
+And then for a different function in a different module:
+
+    errors.module_2.function_3
+
+If each of the preceding examples were called once, the resulting values
+would be:
+
+    errors = 3
+    errors.module_1 = 2
+    errors.module_1.function_1 = 1
+    errors.module_1.function_2 = 1
+    errors.module_2 = 1
+    errors.module_2.function_3 = 1
+
+This tells you that there were 3 errors in the application, with 2 of
+those errors in module\_1. You can then drill down further to see errors
+in specific functions.
+
+### Using counters in time series queries
+
+Knowing the value of a counter is useful. However, you often need to
+know how the value varies over time. Fortunately, the API provides a
+method for you to view this data over any time interval or level of
+granularity.
+
+For example, let’s say you’re incrementing a counter every time someone
+launches your application. You might be interested in which days of the
+week the application sees the most usage. Using the API, you can examine
+the counter over a set of weeks, with the data split into daily
+intervals. Using this information, you can see which are your peak days
+of usage. You can also view usage across a single day, so you can see if
+your application is used more in the mornings or the evenings. For
+business reporting, you may be more interested in monthly reporting.
+
+Note that the system is able to provide you with the report data as you
+need it. The data is maintained in real-time so it can be viewed
+instantly.
+
+### Retrieving counter data
+
+To retrieve counter data, you issue a GET request to the /counters
+endpoint. This is a special, built-in collection that gives you access
+to all the counters currently in the system. The API also provides a
+number of parameters that you can use to search for counter data, as
+follows:
+
+  Parameter     Type                                                                                 Description
+  ------------- ------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
+  start\_time   An [Epoch(Unix)](http://en.wikipedia.org/wiki/Unix_time) timestamp in milliseconds   The beginning of the time period to search
+  end\_time     An [Epoch(Unix)](http://en.wikipedia.org/wiki/Unix_time) timestamp in milliseconds   The end of the time period to search
+  counter       string                                                                               The name of a specific counter to search. You can specify more than one counter in a query (for example, counter=counter1&counter=counter2...)
+  resolution    string                                                                               The interval at which counters are displayed. For example, if the interval is day, and the start time and end time values span 4 days, you will get aggregate counts for each of the 4 days. Possible values are all, minute, five\_minutes, half\_hour, hour, six\_day, day, week, and month.
+
+For example, to retrieve a time range of values, with a granularity of
+"day", for a counter called "button\_clicks", the GET request would look
+like this:
+
+    GET /my-org/my-app/counters?start_time=1315119600000&end_time=1315724400000&resolution=day&counter=button_clicks
+
+The response body would look something like this:
+
+    {
+     action: "get",
+        uri: "http://api.usergrid.com/438a1ca1-cf9b-11e0-bcc1-12313f0204bb/counters",
+        timestamp: 1315354369272,
+        duration: 28,
+        counters: [
+            {
+                name: "button_clicks",
+                values: [
+                    {
+                        value: 2
+                        timestamp: 1315180800000
+                    },
+                    {
+                        value: 1
+                        timestamp: 1315267200000
+                    },
+                    {
+                        value: 1
+                        timestamp: 1315353600000
+                    }
+                ]
+            }
+        ]
+    }

http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/5ba3b73f/docs/concepts/groups.md
----------------------------------------------------------------------
diff --git a/docs/concepts/groups.md b/docs/concepts/groups.md
new file mode 100644
index 0000000..04bed26
--- /dev/null
+++ b/docs/concepts/groups.md
@@ -0,0 +1,38 @@
+# Groups
+
+You can organize app users into groups. Groups have their own Activity Feed, their own permissions and be a useful alternative to Roles, depending on how you model your data. Groups were originaly designed to emulate Facebook Groups, so they will tend to function about the same way Facebook Groups would.
+
+Groups are hierarchical. Every member of the group /groups/california/san-francisco is also a member of the group /groups/california.
+
+Groups are also a great way to model things such a topic subscriptions. For example, you could allow people to subscribe (i.e. become a member of the group and be alerted via Activities) to /groups/memes/dogs/doge or subscribe to all /groups/memes/dogs
+
+
+### General properties
+
+  Property   Type     Description
+  ---------- -------- ---------------------------------------------------------------------------------
+  uuid       UUID     Group’s unique entity ID
+  type       string   Type of entity, in this case “user”
+  created    long     [UNIX timestamp](http://en.wikipedia.org/wiki/Unix_time) of entity creation
+  modified   long     [UNIX timestamp](http://en.wikipedia.org/wiki/Unix_time) of entity modification
+  path       string   Valid slash-delimited group path (mandatory)
+  title      string   Display name
+
+### Set properties
+
+  Set           Type     Description
+  ------------- -------- ---------------------------------------
+  connections   string   Set of connection types (e.g., likes)
+  rolenames     string   Set of roles assigned to a group
+  credentials   string   Set of group credentials
+
+### Collections
+
+  Collection   Type       Description
+  ------------ ---------- ------------------------------------------------------
+  users        user       Collection of users in the group
+  activities   activity   Collection of activities a user has performed
+  feed         activity   Inbox of activity notifications a group has received
+  roles        role       Set of roles to which a group belongs
+
+ 


Mime
View raw message