{"action":"created","comment":{"url":"https://api.github.com/repos/Kinto/kinto/pulls/comments/37972893","id":37972893,"diff_hunk":"@@ -0,0 +1,586 @@\n+Settings\n+########\n+\n+.. image:: /images/overview-features.png\n+    :align: center\n+\n+Kinto is built to be highly configurable. As a result, the related\n+configuration can be verbose, but don't worry, all configuration flags are\n+listed below.\n+\n+.. note::\n+\n+    In order to ease deployment or testing strategies, *Kinto* reads settings\n+    from environment variables, in addition to ``.ini`` files.\n+\n+    For example, ``cliquet.storage_backend`` is read from environment variable\n+    ``CLIQUET_STORAGE_BACKEND`` if defined, else from application ``.ini``, else\n+    from internal defaults.\n+\n+\n+Feature settings\n+================\n+\n++---------------------------------------+--------------------------------------------------------------------------+\n+| Setting name                          | What does it do?                                                         |\n++=======================================+==========================================================================+\n+| cliquet.batch_max_requests ``25``     | The Maximum number of requests that can be sent to the batch endpoint.   |\n++---------------------------------------+--------------------------------------------------------------------------+\n+| cliquet.paginate_by ``None``          | The maximum number of items to include on a response, before enabling    |\n+|                                       | pagination. If set to `None`, no pagination will be used.                |\n++---------------------------------------+--------------------------------------------------------------------------+\n+| cliquet.id_generator                  | The Python *dotted* location of the generator class that should be used  |\n+| ``cliquet.storage.generators.UUID4``  | to generate identifiers on a POST on a collection endpoint.              |\n++---------------------------------------+--------------------------------------------------------------------------+\n+\n+Example:\n+\n+.. code-block:: ini\n+\n+    # Limit number of batch operations per request\n+    # cliquet.batch_max_requests = 25\n+\n+    # Force pagination *(recommended)*\n+    # cliquet.paginate_by = 200\n+\n+    # Custom record ID generator class\n+    # cliquet.id_generator = cliquet.storage.generators.UUID4\n+\n+\n+Backends\n+========\n+\n+In order to configure the backends to use, a number of settings are useful. The\n+most important ones being `{backend_type}_backend` and `{backend_type}_url`,\n+where `backend_type` is one of \"storage\", \"permission\" or \"cache\".\n+\n+Storage\n+:::::::\n+\n++---------------------------------------+--------------------------------------------------------------------------+\n+| Setting name                          | What does it do?                                                         |\n++=======================================+==========================================================================+\n+| cliquet.storage_backend               | The Python *dotted* location of the storage backend to use.              |\n+| ``cliquet.storage.redis``             |                                                                          |\n++---------------------------------------+--------------------------------------------------------------------------+\n+| cliquet.storage_max_fetch_size        | The maximum number of items that can be returned by one request to the   |\n+| ``10000``                             | storage backend. If no pagination is enabled, this is the maximum number |\n+|                                       | of items that can be stored in a collection (otherwise some of them      |\n+|                                       | won't be returned). With pagination enabled, this limitation doesn't     |\n+|                                       | apply.                                                                   |\n++---------------------------------------+--------------------------------------------------------------------------+\n+| cliquet.storage_pool_size ``10``      | The size of the pool of connections to use for the storage backend.      |\n++---------------------------------------+--------------------------------------------------------------------------+\n+| cliquet.storage_url  ``''``           | The URL to use to authenticate to the storage backend. e.g.              |\n+|                                       | ``redis://localhost:6378/1`` or ``postgres://user:pass@database/db``     |\n++---------------------------------------+--------------------------------------------------------------------------+\n+\n+.. code-block:: ini\n+\n+    cliquet.storage_backend = cliquet.storage.redis\n+    cliquet.storage_url = redis://localhost:6379/1\n+\n+    # Safety limit while fetching from storage\n+    # cliquet.storage_max_fetch_size = 10000\n+\n+    # Control number of pooled connections\n+    # cliquet.storage_pool_size = 50\n+\n+\n+Cache\n+:::::\n+\n++---------------------------------------+--------------------------------------------------------------------------+\n+| Setting name                          | What does it do?                                                         |\n++=======================================+==========================================================================+\n+| cliquet.cache_backend                 | The Python *dotted* location of the cache backend to use.                |\n+| ``cliquet.cache.redis``               |                                                                          |\n++---------------------------------------+--------------------------------------------------------------------------+\n+| cliquet.cache_pool_size ``10``        | The size of the pool of connections to use for the cache backend.        |\n++---------------------------------------+--------------------------------------------------------------------------+\n+| cliquet.cache_url  ``''``             | The URL to use to authenticate to the cache backend. e.g.                |\n+|                                       | ``redis://localhost:6378/1`` or ``postgres://user:pass@database/db``     |\n++---------------------------------------+--------------------------------------------------------------------------+\n+\n+.. code-block:: ini\n+\n+    cliquet.cache_backend = cliquet.cache.redis\n+    cliquet.cache_url = redis://localhost:6379/0\n+\n+    # Control number of pooled connections\n+    # cliquet.storage_pool_size = 50\n+\n+Permissions\n+:::::::::::\n+\n++---------------------------------------+--------------------------------------------------------------------------+\n+| Setting name                          | What does it do?                                                         |\n++=======================================+==========================================================================+\n+| cliquet.permission_backend            | The Python *dotted* location of the permission backend to use.           |\n+| ``cliquet.permission.redis``          |                                                                          |\n++---------------------------------------+--------------------------------------------------------------------------+\n+| cliquet.permission_url ``''``         | The URL to use to authenticate to the permission backend. e.g.           |\n+|                                       | ``redis://localhost:6379/1``                                             |\n++---------------------------------------+--------------------------------------------------------------------------+\n+| cliquet.permission_pool_size ``10``   | The size of the pool of connections to use for the permission backend.   |\n++---------------------------------------+--------------------------------------------------------------------------+\n+\n+.. code-block:: ini\n+\n+    cliquet.permission_backend = cliquet.permission.redis\n+    cliquet.permission_url = redis://localhost:6379/1\n+\n+    # Control number of pooled connections\n+    # cliquet.permission_pool_size = 50\n+\n+Bypass permissions with configuration\n+:::::::::::::::::::::::::::::::::::::\n+\n+Permissions are usually retrieved from the permission backend. However, it is\n+also possible to configure them from settings, and it will **bypass** the\n+permission backend.\n+\n+For example, for a resource named \"bucket\", the following setting will enable\n+authenticated people to create bucket records:\n+\n+.. code-block:: ini\n+\n+    cliquet.bucket_create_principals = system.Authenticated\n+\n+The format of these permission settings is\n+``<resource_name>_<permission>_principals = comma,separated,principals``.\n+\n+\n+Scheme, host and port\n+=====================\n+\n+By default *Kinto* does not enforce requests scheme, host and port. It relies\n+on WSGI specification and the related stack configuration. Tuning this becomes\n+necessary when the application runs behind proxies or load balancers.\n+\n+Most implementations, like *uwsgi*, provide configuration variables to adjust it\n+properly.\n+\n+However if, for some reasons, this had to be enforced at the application level,\n+the following settings can be set:\n+\n+.. code-block :: ini\n+\n+   # cliquet.http_scheme = https\n+   # cliquet.http_host = production.server:7777\n+\n+\n+Check the behaviour of the server with the ``url`` value returned in :ref:`the\n+hello view <batch>`.\n+\n++---------------------------------------+--------------------------------------------------------------------------+\n+| Setting name                          | What does it do?                                                         |\n++=======================================+==========================================================================+\n+| cliquet.http_host ``None``            | The HTTP Host used by Kinto to refer to itself. If set to `None`, the    |\n+|                                       | HTTP host is read from HTTP headers.                                     |\n++---------------------------------------+--------------------------------------------------------------------------+\n+| cliquet.http_scheme ``None``          | The HTTP scheme used by Kinto to refer to itself. If set to `None`, the  |\n+|                                       | HTTP scheme is read from the HTTP headers.                               |\n++---------------------------------------+--------------------------------------------------------------------------+\n+\n+Logging\n+=======\n+\n++---------------------------------------+--------------------------------------------------------------------------+\n+| Setting name                          | What does it do?                                                         |\n++=======================================+==========================================================================+\n+| cliquet.logging_renderer              | The Python *dotted* location of the renderer class that should be used   |\n+| ``cliquet.logs.ClassicLogRenderer``   | to render the logs to the standard output.                               |\n++---------------------------------------+--------------------------------------------------------------------------+\n+| cliquet.newrelic_config ``None``      | `None`                                                                   |\n++---------------------------------------+--------------------------------------------------------------------------+\n+| cliquet.newrelic_env ``dev``          | `dev`                                                                    |\n++---------------------------------------+--------------------------------------------------------------------------+\n+| cliquet.statsd_prefix ``cliquet``     | The prefix to use when sending data to statsd.                           |\n++---------------------------------------+--------------------------------------------------------------------------+\n+| cliquet.statsd_url: ``None``          | The URL to use to connect to the statsd host. e.g.                       |\n+|                                       | ``udp://localhost:8125``                                                 |\n++---------------------------------------+--------------------------------------------------------------------------+\n+\n+Logging with Heka\n+:::::::::::::::::\n+\n+Mozilla Services standard logging format can be enabled using:\n+\n+.. code-block:: ini\n+\n+    cliquet.logging_renderer = cliquet.logs.MozillaHekaRenderer\n+\n+\n+With the following configuration, all logs are redirected to standard output\n+(See `12factor app <http://12factor.net/logs>`_):\n+\n+.. code-block:: ini\n+\n+    [loggers]\n+    keys = root\n+\n+    [handlers]\n+    keys = console\n+\n+    [formatters]\n+    keys = heka\n+\n+    [logger_root]\n+    level = INFO\n+    handlers = console\n+    formatter = heka\n+\n+    [handler_console]\n+    class = StreamHandler\n+    args = (sys.stdout,)\n+    level = NOTSET\n+\n+    [formatter_heka]\n+    format = %(message)s\n+\n+\n+Handling exceptions with Sentry\n+:::::::::::::::::::::::::::::::\n+\n+Requires the ``raven`` package, or *Cliquet* installed with\n+``pip install cliquet[monitoring]``.\n+\n+Sentry logging can be enabled, `as explained in official documentation\n+<http://raven.readthedocs.org/en/latest/integrations/pyramid.html#logger-setup>`_.\n+\n+.. note::\n+\n+    The application sends an *INFO* message on startup, mainly for setup check.\n+\n+\n+Monitoring with StatsD\n+::::::::::::::::::::::\n+\n+Requires the ``statsd`` package, or *Cliquet* installed with\n+``pip install cliquet[monitoring]``.\n+\n+StatsD metrics can be enabled (disabled by default):\n+\n+.. code-block:: ini\n+\n+    cliquet.statsd_url = udp://localhost:8125\n+    # cliquet.statsd_prefix = cliquet.project_name\n+\n+\n+Monitoring with New Relic\n+:::::::::::::::::::::::::\n+\n+Requires the ``newrelic`` package, or *Cliquet* installed with\n+``pip install cliquet[monitoring]``.\n+\n+Enable middlewares as described :ref:`here <configuration-middlewares>`.\n+\n+New-Relic can be enabled (disabled by default):\n+\n+.. code-block:: ini\n+\n+    cliquet.newrelic_config = /location/of/newrelic.ini\n+    cliquet.newrelic_env = prod\n+\n+.. _configuration-authentication:\n+\n+Authentication\n+==============\n+\n+By default, *Kinto* relies on *Basic Auth* to authenticate users.\n+\n+User registration is not necessary. A unique user idenfier will be created\n+for each couple of ``username:password``.\n+\n+*Kinto* is compatible with *Firefox Account*.  Install and\n+configure :github:`mozilla-services/cliquet-fxa`.\n+\n++---------------------------------------+--------------------------------------------------------------------------+\n+| Setting name                          | What does it do?                                                         |\n++=======================================+==========================================================================+\n+| cliquet.userid_hmac_secret ``''``     | The secret used by the server to derive the shareable user id. This      |\n+|                                       | value should be unique to each instance and, of course, kept secret. By  |\n+|                                       | default, Kinto doesn't define a secret for you, and won't start unless   |\n+|                                       | you generate one.                                                        |\n++---------------------------------------+--------------------------------------------------------------------------+\n+| multiauth.policies ``[\"basicauth\",    | `MultiAuthenticationPolicy <https://github.com/mozilla-                  |\n+| ]``                                   | services/pyramid_multiauth>`_ is a Pyramid authentication policy that    |\n+|                                       | proxies to a stack of other IAuthenticationPolicy objects, to provide a  |\n+|                                       | combined auth solution from individual pieces. Simply pass it a list of  |\n+|                                       | policies that should be tried in order.                                  |\n++---------------------------------------+--------------------------------------------------------------------------+\n+| multiauth.policy.basicauth.use        | Python *dotted* path to the authentication policy to use for basicauth.  |\n+| ``('cliquet.authentication.           | By default, every couple of login / password will be accepted, meaning   |\n+| BasicAuthAuthenticationPolicy')``     | that no account creation is required.                                    |\n++---------------------------------------+--------------------------------------------------------------------------+\n+| multiauth.authorization_policy        | Python *dotted* path the authorization policy to use for basicAuth.      |\n+| ``('cliquet.authorization.            | Letting the default value will require the :term:`principal` to have     |\n+| AuthorizationPolicy')``               | access to the required fields.                                           |\n++---------------------------------------+--------------------------------------------------------------------------+\n+\n+Since user identification is hashed in storage, a secret key is required\n+in configuration:\n+\n+.. code-block:: ini\n+\n+    # cliquet.userid_hmac_secret = b4c96a8692291d88fe5a97dd91846eb4\n+\n+\n+Authentication setup\n+::::::::::::::::::::\n+\n+*Kinto* relies on :github:`pyramid multiauth <mozilla-service/pyramid_multiauth>`_\n+to initialize authentication.\n+\n+Therefore, any authentication policy can be specified through configuration.\n+\n+For example, using the following example, *Basic Auth*, *Persona* and *IP Auth*\n+are enabled:\n+\n+.. code-block:: ini\n+\n+    multiauth.policies = basicauth pyramid_persona ipauth\n+\n+    multiauth.policy.ipauth.use = pyramid_ipauth.IPAuthentictionPolicy\n+    multiauth.policy.ipauth.ipaddrs = 192.168.0.*\n+    multiauth.policy.ipauth.userid = LAN-user\n+    multiauth.policy.ipauth.principals = trusted\n+\n+\n+Similarly, any authorization policies and group finder function can be\n+specified through configuration in order to deeply customize permissions\n+handling and authorizations.\n+\n+\n+Basic Auth\n+::::::::::\n+\n+``basicauth`` is mentioned among ``multiauth.policies`` by default.\n+\n+.. code-block:: ini\n+\n+    multiauth.policies = basicauth\n+\n+By default, it uses an internal *Basic Auth* policy.\n+\n+In order to replace it by another one:\n+\n+.. code-block:: ini\n+\n+    multiauth.policies = basicauth\n+    multiauth.policy.basicauth.use = myproject.authn.BasicAuthPolicy\n+\n+\n+Custom Authentication\n+:::::::::::::::::::::\n+\n+Using the various `Pyramid authentication packages\n+<https://github.com/ITCase/awesome-pyramid#authentication>`_, it is possible\n+to plug any kind of authentication.","path":"docs/configuration/settings.rst","position":380,"original_position":380,"commit_id":"e22ef85414dc299a59c3058ac00ece893259b546","original_commit_id":"e22ef85414dc299a59c3058ac00ece893259b546","user":{"login":"phrawzty","id":625232,"avatar_url":"https://avatars.githubusercontent.com/u/625232?v=3","gravatar_id":"","url":"https://api.github.com/users/phrawzty","html_url":"https://github.com/phrawzty","followers_url":"https://api.github.com/users/phrawzty/followers","following_url":"https://api.github.com/users/phrawzty/following{/other_user}","gists_url":"https://api.github.com/users/phrawzty/gists{/gist_id}","starred_url":"https://api.github.com/users/phrawzty/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/phrawzty/subscriptions","organizations_url":"https://api.github.com/users/phrawzty/orgs","repos_url":"https://api.github.com/users/phrawzty/repos","events_url":"https://api.github.com/users/phrawzty/events{/privacy}","received_events_url":"https://api.github.com/users/phrawzty/received_events","type":"User","site_admin":false},"body":"> to plug *in* any kind [...]","created_at":"2015-08-26T11:53:21Z","updated_at":"2015-08-26T11:53:21Z","html_url":"https://github.com/Kinto/kinto/pull/156#discussion_r37972893","pull_request_url":"https://api.github.com/repos/Kinto/kinto/pulls/156","_links":{"self":{"href":"https://api.github.com/repos/Kinto/kinto/pulls/comments/37972893"},"html":{"href":"https://github.com/Kinto/kinto/pull/156#discussion_r37972893"},"pull_request":{"href":"https://api.github.com/repos/Kinto/kinto/pulls/156"}}},"pull_request":{"url":"https://api.github.com/repos/Kinto/kinto/pulls/156","id":42341687,"html_url":"https://github.com/Kinto/kinto/pull/156","diff_url":"https://github.com/Kinto/kinto/pull/156.diff","patch_url":"https://github.com/Kinto/kinto/pull/156.patch","issue_url":"https://api.github.com/repos/Kinto/kinto/issues/156","number":156,"state":"open","locked":false,"title":"Documentation returns","user":{"login":"ametaireau","id":67073,"avatar_url":"https://avatars.githubusercontent.com/u/67073?v=3","gravatar_id":"","url":"https://api.github.com/users/ametaireau","html_url":"https://github.com/ametaireau","followers_url":"https://api.github.com/users/ametaireau/followers","following_url":"https://api.github.com/users/ametaireau/following{/other_user}","gists_url":"https://api.github.com/users/ametaireau/gists{/gist_id}","starred_url":"https://api.github.com/users/ametaireau/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ametaireau/subscriptions","organizations_url":"https://api.github.com/users/ametaireau/orgs","repos_url":"https://api.github.com/users/ametaireau/repos","events_url":"https://api.github.com/users/ametaireau/events{/privacy}","received_events_url":"https://api.github.com/users/ametaireau/received_events","type":"User","site_admin":false},"body":"This pull request makes the documentation easier to grasp, and aims to facilitate the integration with the *Cliquet* documentation.\r\n\r\n- [x] Display sections in the documentation index;\r\n- [x] List all HTTP endpoints in a table for easier access;\r\n- [x] Include useful *Cliquet* docs;\r\n- [x] Remove all notions of *Cliquet*;\r\n- [x] Rework the rationale page;\r\n- [x] Prepare a FAQ;\r\n- [x] Rework the concepts page;\r\n- [x] Make it easier to contribute;\r\n- [x] Rework the configuration section;\r\n\r\nOpen questions:\r\n- Should we put the FAQ in the rationale page?\r\n- Should we put the comparison table in the rationale page?\r\n\r\nIndex page:\r\n![Index page](https://cloud.githubusercontent.com/assets/67073/9249135/9e5daf64-41c2-11e5-8677-178e29d30588.png)\r\n\r\nHTTP API reference:\r\n![HTTP API reference](https://cloud.githubusercontent.com/assets/67073/9249134/9e565908-41c2-11e5-9715-7a759c1e8431.png)\r\n\r\nComparison table:\r\n![comparison](https://cloud.githubusercontent.com/assets/67073/9254303/1c85406c-41e3-11e5-908b-63e5298858da.png)\r\n","created_at":"2015-08-13T11:51:32Z","updated_at":"2015-08-26T11:53:21Z","closed_at":null,"merged_at":null,"merge_commit_sha":"c8ce4d37f33b01ad4ba137d62dc8128aae006d28","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/Kinto/kinto/pulls/156/commits","review_comments_url":"https://api.github.com/repos/Kinto/kinto/pulls/156/comments","review_comment_url":"https://api.github.com/repos/Kinto/kinto/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Kinto/kinto/issues/156/comments","statuses_url":"https://api.github.com/repos/Kinto/kinto/statuses/e22ef85414dc299a59c3058ac00ece893259b546","head":{"label":"Kinto:documentation-returns","ref":"documentation-returns","sha":"e22ef85414dc299a59c3058ac00ece893259b546","user":{"login":"Kinto","id":13413813,"avatar_url":"https://avatars.githubusercontent.com/u/13413813?v=3","gravatar_id":"","url":"https://api.github.com/users/Kinto","html_url":"https://github.com/Kinto","followers_url":"https://api.github.com/users/Kinto/followers","following_url":"https://api.github.com/users/Kinto/following{/other_user}","gists_url":"https://api.github.com/users/Kinto/gists{/gist_id}","starred_url":"https://api.github.com/users/Kinto/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kinto/subscriptions","organizations_url":"https://api.github.com/users/Kinto/orgs","repos_url":"https://api.github.com/users/Kinto/repos","events_url":"https://api.github.com/users/Kinto/events{/privacy}","received_events_url":"https://api.github.com/users/Kinto/received_events","type":"Organization","site_admin":false},"repo":{"id":31315021,"name":"kinto","full_name":"Kinto/kinto","owner":{"login":"Kinto","id":13413813,"avatar_url":"https://avatars.githubusercontent.com/u/13413813?v=3","gravatar_id":"","url":"https://api.github.com/users/Kinto","html_url":"https://github.com/Kinto","followers_url":"https://api.github.com/users/Kinto/followers","following_url":"https://api.github.com/users/Kinto/following{/other_user}","gists_url":"https://api.github.com/users/Kinto/gists{/gist_id}","starred_url":"https://api.github.com/users/Kinto/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kinto/subscriptions","organizations_url":"https://api.github.com/users/Kinto/orgs","repos_url":"https://api.github.com/users/Kinto/repos","events_url":"https://api.github.com/users/Kinto/events{/privacy}","received_events_url":"https://api.github.com/users/Kinto/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Kinto/kinto","description":"store, sync. rinse and repeat.","fork":false,"url":"https://api.github.com/repos/Kinto/kinto","forks_url":"https://api.github.com/repos/Kinto/kinto/forks","keys_url":"https://api.github.com/repos/Kinto/kinto/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Kinto/kinto/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Kinto/kinto/teams","hooks_url":"https://api.github.com/repos/Kinto/kinto/hooks","issue_events_url":"https://api.github.com/repos/Kinto/kinto/issues/events{/number}","events_url":"https://api.github.com/repos/Kinto/kinto/events","assignees_url":"https://api.github.com/repos/Kinto/kinto/assignees{/user}","branches_url":"https://api.github.com/repos/Kinto/kinto/branches{/branch}","tags_url":"https://api.github.com/repos/Kinto/kinto/tags","blobs_url":"https://api.github.com/repos/Kinto/kinto/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Kinto/kinto/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Kinto/kinto/git/refs{/sha}","trees_url":"https://api.github.com/repos/Kinto/kinto/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Kinto/kinto/statuses/{sha}","languages_url":"https://api.github.com/repos/Kinto/kinto/languages","stargazers_url":"https://api.github.com/repos/Kinto/kinto/stargazers","contributors_url":"https://api.github.com/repos/Kinto/kinto/contributors","subscribers_url":"https://api.github.com/repos/Kinto/kinto/subscribers","subscription_url":"https://api.github.com/repos/Kinto/kinto/subscription","commits_url":"https://api.github.com/repos/Kinto/kinto/commits{/sha}","git_commits_url":"https://api.github.com/repos/Kinto/kinto/git/commits{/sha}","comments_url":"https://api.github.com/repos/Kinto/kinto/comments{/number}","issue_comment_url":"https://api.github.com/repos/Kinto/kinto/issues/comments{/number}","contents_url":"https://api.github.com/repos/Kinto/kinto/contents/{+path}","compare_url":"https://api.github.com/repos/Kinto/kinto/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Kinto/kinto/merges","archive_url":"https://api.github.com/repos/Kinto/kinto/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Kinto/kinto/downloads","issues_url":"https://api.github.com/repos/Kinto/kinto/issues{/number}","pulls_url":"https://api.github.com/repos/Kinto/kinto/pulls{/number}","milestones_url":"https://api.github.com/repos/Kinto/kinto/milestones{/number}","notifications_url":"https://api.github.com/repos/Kinto/kinto/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Kinto/kinto/labels{/name}","releases_url":"https://api.github.com/repos/Kinto/kinto/releases{/id}","created_at":"2015-02-25T13:34:23Z","updated_at":"2015-08-13T02:04:55Z","pushed_at":"2015-08-25T21:22:32Z","git_url":"git://github.com/Kinto/kinto.git","ssh_url":"git@github.com:Kinto/kinto.git","clone_url":"https://github.com/Kinto/kinto.git","svn_url":"https://github.com/Kinto/kinto","homepage":"http://kinto.readthedocs.org/","size":1796,"stargazers_count":14,"watchers_count":14,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":7,"mirror_url":null,"open_issues_count":28,"forks":7,"open_issues":28,"watchers":14,"default_branch":"master"}},"base":{"label":"Kinto:master","ref":"master","sha":"803aea1d1ecefbb1b463492452fc83d37b03fca2","user":{"login":"Kinto","id":13413813,"avatar_url":"https://avatars.githubusercontent.com/u/13413813?v=3","gravatar_id":"","url":"https://api.github.com/users/Kinto","html_url":"https://github.com/Kinto","followers_url":"https://api.github.com/users/Kinto/followers","following_url":"https://api.github.com/users/Kinto/following{/other_user}","gists_url":"https://api.github.com/users/Kinto/gists{/gist_id}","starred_url":"https://api.github.com/users/Kinto/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kinto/subscriptions","organizations_url":"https://api.github.com/users/Kinto/orgs","repos_url":"https://api.github.com/users/Kinto/repos","events_url":"https://api.github.com/users/Kinto/events{/privacy}","received_events_url":"https://api.github.com/users/Kinto/received_events","type":"Organization","site_admin":false},"repo":{"id":31315021,"name":"kinto","full_name":"Kinto/kinto","owner":{"login":"Kinto","id":13413813,"avatar_url":"https://avatars.githubusercontent.com/u/13413813?v=3","gravatar_id":"","url":"https://api.github.com/users/Kinto","html_url":"https://github.com/Kinto","followers_url":"https://api.github.com/users/Kinto/followers","following_url":"https://api.github.com/users/Kinto/following{/other_user}","gists_url":"https://api.github.com/users/Kinto/gists{/gist_id}","starred_url":"https://api.github.com/users/Kinto/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kinto/subscriptions","organizations_url":"https://api.github.com/users/Kinto/orgs","repos_url":"https://api.github.com/users/Kinto/repos","events_url":"https://api.github.com/users/Kinto/events{/privacy}","received_events_url":"https://api.github.com/users/Kinto/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Kinto/kinto","description":"store, sync. rinse and repeat.","fork":false,"url":"https://api.github.com/repos/Kinto/kinto","forks_url":"https://api.github.com/repos/Kinto/kinto/forks","keys_url":"https://api.github.com/repos/Kinto/kinto/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Kinto/kinto/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Kinto/kinto/teams","hooks_url":"https://api.github.com/repos/Kinto/kinto/hooks","issue_events_url":"https://api.github.com/repos/Kinto/kinto/issues/events{/number}","events_url":"https://api.github.com/repos/Kinto/kinto/events","assignees_url":"https://api.github.com/repos/Kinto/kinto/assignees{/user}","branches_url":"https://api.github.com/repos/Kinto/kinto/branches{/branch}","tags_url":"https://api.github.com/repos/Kinto/kinto/tags","blobs_url":"https://api.github.com/repos/Kinto/kinto/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Kinto/kinto/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Kinto/kinto/git/refs{/sha}","trees_url":"https://api.github.com/repos/Kinto/kinto/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Kinto/kinto/statuses/{sha}","languages_url":"https://api.github.com/repos/Kinto/kinto/languages","stargazers_url":"https://api.github.com/repos/Kinto/kinto/stargazers","contributors_url":"https://api.github.com/repos/Kinto/kinto/contributors","subscribers_url":"https://api.github.com/repos/Kinto/kinto/subscribers","subscription_url":"https://api.github.com/repos/Kinto/kinto/subscription","commits_url":"https://api.github.com/repos/Kinto/kinto/commits{/sha}","git_commits_url":"https://api.github.com/repos/Kinto/kinto/git/commits{/sha}","comments_url":"https://api.github.com/repos/Kinto/kinto/comments{/number}","issue_comment_url":"https://api.github.com/repos/Kinto/kinto/issues/comments{/number}","contents_url":"https://api.github.com/repos/Kinto/kinto/contents/{+path}","compare_url":"https://api.github.com/repos/Kinto/kinto/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Kinto/kinto/merges","archive_url":"https://api.github.com/repos/Kinto/kinto/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Kinto/kinto/downloads","issues_url":"https://api.github.com/repos/Kinto/kinto/issues{/number}","pulls_url":"https://api.github.com/repos/Kinto/kinto/pulls{/number}","milestones_url":"https://api.github.com/repos/Kinto/kinto/milestones{/number}","notifications_url":"https://api.github.com/repos/Kinto/kinto/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Kinto/kinto/labels{/name}","releases_url":"https://api.github.com/repos/Kinto/kinto/releases{/id}","created_at":"2015-02-25T13:34:23Z","updated_at":"2015-08-13T02:04:55Z","pushed_at":"2015-08-25T21:22:32Z","git_url":"git://github.com/Kinto/kinto.git","ssh_url":"git@github.com:Kinto/kinto.git","clone_url":"https://github.com/Kinto/kinto.git","svn_url":"https://github.com/Kinto/kinto","homepage":"http://kinto.readthedocs.org/","size":1796,"stargazers_count":14,"watchers_count":14,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":7,"mirror_url":null,"open_issues_count":28,"forks":7,"open_issues":28,"watchers":14,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Kinto/kinto/pulls/156"},"html":{"href":"https://github.com/Kinto/kinto/pull/156"},"issue":{"href":"https://api.github.com/repos/Kinto/kinto/issues/156"},"comments":{"href":"https://api.github.com/repos/Kinto/kinto/issues/156/comments"},"review_comments":{"href":"https://api.github.com/repos/Kinto/kinto/pulls/156/comments"},"review_comment":{"href":"https://api.github.com/repos/Kinto/kinto/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Kinto/kinto/pulls/156/commits"},"statuses":{"href":"https://api.github.com/repos/Kinto/kinto/statuses/e22ef85414dc299a59c3058ac00ece893259b546"}}}}