{"action":"created","comment":{"url":"https://api.github.com/repos/zalando/nakadi/pulls/comments/73488094","id":73488094,"diff_hunk":"@@ -606,22 +488,389 @@ paths:\n           description: Partition id\n           type: string\n           required: true\n-        - name: X-Flow-Id\n-          in: header\n+        - $ref: '#/parameters/XFlowId'\n+      responses:\n+        '200':\n+          description: OK\n+          schema:\n+            $ref: '#/definitions/Partition'\n+        '401':\n+          description: Client is not authenticated\n+          schema:\n+            $ref: '#/definitions/Problem'\n+\n+  /subscriptions:\n+    post:\n+      tags:\n+        - managed-api\n+      security:\n+        - oauth2: ['nakadi.event_stream.read']\n+      description: |\n+        This endpoint creates a subscription for EventTypes. The subscription is needed to be able to\n+        consume events from EventTypes in a high level way when Nakadi stores the offsets and manages the\n+        rebalancing of consuming clients.\n+        The subscription is identified by its key parameters (owning_application, event_types, consumer_group). If\n+        this endpoint is invoked several times with the same key subscription properties in body (order of even_types is\n+        not important) - the subscription will be created only once and for all other calls it will just return\n+        the subscription that was already created.\n+      parameters:\n+        - name: subscription\n+          in: body\n+          description: Subscription to create\n+          schema:\n+            $ref: '#/definitions/Subscription'\n+          required: true\n+      responses:\n+        '200':\n           description: |\n-            The flow id of the request, which is written into the logs and passed to called\n-            services. Helpful for operational troubleshooting and log analysis.\n+            Subscription for such parameters already exists. Returns subscription object that already\n+            existed.\n+          schema:\n+            $ref: '#/definitions/Subscription'\n+          headers:\n+            Content-Location:\n+              description: the URI of existing subscription resource\n+              type: string\n+            Location:\n+              description: the URI of existing subscription resource\n+              type: string\n+        '201':\n+          description: Subscription was successfuly created. Returns subscription object that was created.\n+          schema:\n+            $ref: '#/definitions/Subscription'\n+          headers:\n+            Content-Location:\n+              description: the URI of created subscription resource\n+              type: string\n+            Location:\n+              description: the URI of created subscription resource\n+              type: string\n+        '401':\n+          description: Client is not authenticated\n+          schema:\n+            $ref: '#/definitions/Problem'\n+        '403':\n+          description: Client is not authorized to perform this operation\n+          schema:\n+            $ref: '#/definitions/Problem'\n+        '400':\n+          description: Bad Request\n+          schema:\n+            $ref: '#/definitions/Problem'\n+        '422':\n+          description: Unprocessable Entity\n+          schema:\n+            $ref: '#/definitions/Problem'\n+        '500':\n+          description: Server error\n+          schema:\n+            $ref: '#/definitions/Problem'\n+        '503':\n+          description: Service (temporarily) unavailable\n+          schema:\n+            $ref: '#/definitions/Problem'\n+    get:\n+      tags:\n+        - managed-api\n+      security:\n+        - oauth2: ['nakadi.event_stream.read']\n+      description: Lists all subscriptions that exist in a system.\n+      parameters:\n+        - name: owning_application\n+          in: query\n+          description: parameter to filter subscriptions list by owning application.\n           type: string\n-          format: flow-id\n+          required: false\n       responses:\n         '200':\n           description: OK\n           schema:\n-            $ref: '#/definitions/Partition'\n+            type: object\n+            properties:\n+              data:\n+                type: array\n+                items:\n+                  $ref: '#/definitions/Subscription'\n+        '401':\n+          description: Client is not authenticated\n+          schema:\n+            $ref: '#/definitions/Problem'\n+        '403':\n+          description: Client is not authorized to perform this operation\n+          schema:\n+            $ref: '#/definitions/Problem'\n+        '500':\n+          description: Server error\n+          schema:\n+            $ref: '#/definitions/Problem'\n+        '503':\n+          description: Service (temporarily) unavailable\n+          schema:\n+            $ref: '#/definitions/Problem'\n+\n+  /subscriptions/{subscription_id}:\n+    get:\n+      tags:\n+        - managed-api\n+      security:\n+        - oauth2: ['nakadi.event_stream.read']\n+      description: Returns a subscription identified by id.\n+      parameters:\n+        - $ref: '#/parameters/SubscriptionId'\n+      responses:\n+        '200':\n+          description: OK\n+          schema:\n+            $ref: '#/definitions/Subscription'\n+        '401':\n+          description: Client is not authenticated\n+          schema:\n+            $ref: '#/definitions/Problem'\n+        '403':\n+          description: Client is not authorized to perform this operation\n+          schema:\n+            $ref: '#/definitions/Problem'\n+        '404':\n+          description: Subscription not found\n+          schema:\n+            $ref: '#/definitions/Problem'\n+        '500':\n+          description: Server error\n+          schema:\n+            $ref: '#/definitions/Problem'\n+        '503':\n+          description: Service (temporarily) unavailable\n+          schema:\n+            $ref: '#/definitions/Problem'\n+\n+  /subscriptions/{subscription_id}/cursors:\n+    get:\n+      tags:\n+        - managed-api\n+      security:\n+        - oauth2: ['nakadi.event_stream.read']\n+      description: Exposes the currently committed offsets of a subscription.\n+      parameters:\n+        - $ref: '#/parameters/SubscriptionId'\n+      responses:\n+        '200':\n+          description: Ok\n+          schema:\n+            type: array\n+            items:\n+              $ref: '#/definitions/Cursor'\n         '401':\n           description: Client is not authenticated\n           schema:\n             $ref: '#/definitions/Problem'\n+        '403':\n+          description: Client is not authorized to perform this operation\n+          schema:\n+            $ref: '#/definitions/Problem'\n+        '404':\n+          description: Subscription not found\n+          schema:\n+            $ref: '#/definitions/Problem'\n+        '500':\n+          description: Server error\n+          schema:\n+            $ref: '#/definitions/Problem'\n+        '503':\n+          description: Service (temporarily) unavailable\n+          schema:\n+            $ref: '#/definitions/Problem'\n+    put:\n+      tags:\n+        - managed-api\n+      security:\n+        - oauth2: ['nakadi.event_stream.read']\n+      description: |\n+        Endpoint for committing offsets of the subscription. The behavior of commit is specific to `commit_mode`\n+        parameter of the client stream (please see details in subscription streaming endpoint specification).\n+      parameters:\n+        - name: subscription_id\n+          in: path\n+          type: string\n+          description: Id of subscription\n+          required: true\n+        - name: X-Nakadi-StreamId\n+          in: header\n+          type: string\n+          description: |\n+            Id of stream which client uses to read events. It is not possible to make a commit for a terminated or\n+            none-existing stream. Also the client can't commit something which was not sent to his stream.\n+          required: true\n+        - name: cursors\n+          in: body\n+          description: Cursors with offsets to commit.\n+          schema:\n+            type: array\n+            items:\n+              $ref: '#/definitions/Cursor'\n+          required: true\n+      responses:\n+        '200':\n+          description: Offsets were committed\n+        '204':\n+          description: |\n+            No Content. At least one cursor which was tried to be committed is older or equal to already committed one.\n+        '401':\n+          description: Client is not authenticated\n+          schema:\n+            $ref: '#/definitions/Problem'\n+        '403':\n+          description: Client is not authorized to perform this operation\n+          schema:\n+            $ref: '#/definitions/Problem'\n+        '404':\n+          description: Subscription not found\n+          schema:\n+            $ref: '#/definitions/Problem'\n+        '422':\n+          description: Unprocessable Entity\n+          schema:\n+            $ref: '#/definitions/Problem'\n+        '500':\n+          description: Server error\n+          schema:\n+            $ref: '#/definitions/Problem'\n+        '503':\n+          description: Service (temporarily) unavailable\n+          schema:\n+            $ref: '#/definitions/Problem'\n+\n+  /subscriptions/{subscription_id}/events:\n+    get:\n+      tags:\n+        - stream-api\n+        - managed-api\n+      security:\n+        - oauth2: ['nakadi.event_stream.read']\n+      description: |\n+        Starts a new stream for reading events from this subscription. The data will be automatically rebalanced\n+        between streams of one subscription. The minimal consumption unit is a partition, so it is possible to start as\n+        many streams as the total number of partitions in event-types of this subscription. The rebalance currently\n+        only operates with the number of partitions so the amount of data in event-types/partitions is not considered\n+        during autorebalance.\n+        The position of the consumption is managed by Nakadi. The client is required to commit the cursors he gets in\n+        a stream. This also depends on the `commit_mode` parameter that is set for the stream.\n+      parameters:\n+        - $ref: '#/parameters/SubscriptionId'\n+        - name: commit_timeout\n+          in: query\n+          description: |\n+            The amount of time allowed between commits. If no commit is performed within this amount of time\n+            - the connection will be closed from Nakadi side. Specified in seconds.\n+          type: integer\n+          format: int32\n+          required: false\n+          default: 30\n+        - name: window_size\n+          in: query\n+          description: |\n+            The amount of uncommitted events Nakadi will stream before pausing the stream. When in paused\n+            state and commit comes - the stream will continue. Minimal window size is 1.\n+          type: integer\n+          format: int32\n+          required: false\n+          default: 10000\n+        - name: commit_mode\n+          in: query\n+          description: |\n+            The commit mode that will be used for this stream. Currently only `commit_at_will` is supported.\n+            Possible values:\n+\n+            - `commit_at_will`: client is free to choose how often he wants to commit. Of course the commit_timeout\n+            property should still be respected. When a batch is committed that also automatically commits all previous\n+            batches that were sent in a stream for this partition.\n+\n+            - `commit_each`: this commit mode requires each batch to be committed, and it should be done in correct\n+            order. Committing a cursor when the previous is not yet committed is not possible.\n+\n+            - `auto_commit`: everything that Nakadi sends to stream is considered to be committed. No actions are\n+            required from client side to commit. Be aware that with this commit mode loosing of some events is very\n+            probable. So you should know what you are doing if you use autocommit.\n+          type: string\n+          enum:\n+            - commit_at_will\n+            - commit_each\n+            - auto_commit\n+          required: false\n+          default: commit_at_will\n+        - $ref: '#/parameters/BatchLimit'\n+        - $ref: '#/parameters/StreamLimit'\n+        - $ref: '#/parameters/BatchFlushTimeout'\n+        - $ref: '#/parameters/StreamTimeout'\n+        - $ref: '#/parameters/StreamKeepAliveLimit'\n+        - $ref: '#/parameters/XFlowId'\n+      responses:\n+        '200':\n+          description: |\n+            Ok. Stream started.\n+            Stream format is a continuous series of `EventStreamBatch`s separated by `\\n`\n+          schema:\n+            $ref: '#/definitions/EventStreamBatch'\n+          headers:\n+            X-Nakadi-StreamId:\n+              description: |\n+                the id of this stream generated by Nakadi. Must be used for committing events that were read by client\n+                from this stream.\n+              type: string\n+        '401':\n+          description: Client is not authenticated\n+          schema:\n+            $ref: '#/definitions/Problem'\n+        '403':\n+          description: Client is not authorized to perform this operation\n+          schema:\n+            $ref: '#/definitions/Problem'\n+        '404':\n+          description: Subscription not found.\n+          schema:\n+            $ref: '#/definitions/Problem'\n+        '409':\n+          description: |\n+            Conflict. There are no empty slots for this subscriptions. The amount of consumers for this subscription\n+            already equals the maximal value - the total amount of this subscription partitions.\n+          schema:\n+            $ref: '#/definitions/Problem'\n+        '422':","path":"api/nakadi-event-bus-api.yaml","position":598,"original_position":598,"commit_id":"03d883e8e376411891cadc890ad26a8b8ae1e470","original_commit_id":"03d883e8e376411891cadc890ad26a8b8ae1e470","user":{"login":"v-stepanov","id":13309177,"avatar_url":"https://avatars.githubusercontent.com/u/13309177?v=3","gravatar_id":"","url":"https://api.github.com/users/v-stepanov","html_url":"https://github.com/v-stepanov","followers_url":"https://api.github.com/users/v-stepanov/followers","following_url":"https://api.github.com/users/v-stepanov/following{/other_user}","gists_url":"https://api.github.com/users/v-stepanov/gists{/gist_id}","starred_url":"https://api.github.com/users/v-stepanov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/v-stepanov/subscriptions","organizations_url":"https://api.github.com/users/v-stepanov/orgs","repos_url":"https://api.github.com/users/v-stepanov/repos","events_url":"https://api.github.com/users/v-stepanov/events{/privacy}","received_events_url":"https://api.github.com/users/v-stepanov/received_events","type":"User","site_admin":false},"body":"@whiskeysierra Yes, I agree that we don't need it. \r\nHowever we need a status code for a case when input parameters are invalid. What would you suggest for that? BAD_REQUEST?","created_at":"2016-08-04T09:12:54Z","updated_at":"2016-08-04T09:12:54Z","html_url":"https://github.com/zalando/nakadi/pull/353#discussion_r73488094","pull_request_url":"https://api.github.com/repos/zalando/nakadi/pulls/353","_links":{"self":{"href":"https://api.github.com/repos/zalando/nakadi/pulls/comments/73488094"},"html":{"href":"https://github.com/zalando/nakadi/pull/353#discussion_r73488094"},"pull_request":{"href":"https://api.github.com/repos/zalando/nakadi/pulls/353"}}},"pull_request":{"url":"https://api.github.com/repos/zalando/nakadi/pulls/353","id":78153723,"html_url":"https://github.com/zalando/nakadi/pull/353","diff_url":"https://github.com/zalando/nakadi/pull/353.diff","patch_url":"https://github.com/zalando/nakadi/pull/353.patch","issue_url":"https://api.github.com/repos/zalando/nakadi/issues/353","number":353,"state":"open","locked":false,"title":"Feature/aruha 190 subscription api","user":{"login":"rcillo","id":344648,"avatar_url":"https://avatars.githubusercontent.com/u/344648?v=3","gravatar_id":"","url":"https://api.github.com/users/rcillo","html_url":"https://github.com/rcillo","followers_url":"https://api.github.com/users/rcillo/followers","following_url":"https://api.github.com/users/rcillo/following{/other_user}","gists_url":"https://api.github.com/users/rcillo/gists{/gist_id}","starred_url":"https://api.github.com/users/rcillo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rcillo/subscriptions","organizations_url":"https://api.github.com/users/rcillo/orgs","repos_url":"https://api.github.com/users/rcillo/repos","events_url":"https://api.github.com/users/rcillo/events{/privacy}","received_events_url":"https://api.github.com/users/rcillo/received_events","type":"User","site_admin":false},"body":"Clients streaming through a subscription do not need to handle offsets persistence or partitions assignment. The workflow is very simple:\r\n\r\n1. First client creates a subscription\r\n2. This client starts streaming from this subscription (which automatically assigns all partitions to it)\r\n3. A new client is launched and tries to create the same subscription\r\n4. Since subscription creation is idempotent, it gets a reference to the existing subscription\r\n5. The new client starts streaming from this subscription, which causes partitions to be reassigned (rebalanced) between clients.\r\n6. Repeat 3-5 until you have as many clients as partitions.\r\n\r\nSubscriptions also provide a mechanism for implementing backpressure using a window size strategy.","created_at":"2016-07-20T14:09:56Z","updated_at":"2016-08-04T09:12:54Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3d241046f37e80826f122430b32f98cfbbb9017c","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/zalando/nakadi/pulls/353/commits","review_comments_url":"https://api.github.com/repos/zalando/nakadi/pulls/353/comments","review_comment_url":"https://api.github.com/repos/zalando/nakadi/pulls/comments{/number}","comments_url":"https://api.github.com/repos/zalando/nakadi/issues/353/comments","statuses_url":"https://api.github.com/repos/zalando/nakadi/statuses/03d883e8e376411891cadc890ad26a8b8ae1e470","head":{"label":"zalando:feature/ARUHA-190-subscription-api","ref":"feature/ARUHA-190-subscription-api","sha":"03d883e8e376411891cadc890ad26a8b8ae1e470","user":{"login":"zalando","id":1564818,"avatar_url":"https://avatars.githubusercontent.com/u/1564818?v=3","gravatar_id":"","url":"https://api.github.com/users/zalando","html_url":"https://github.com/zalando","followers_url":"https://api.github.com/users/zalando/followers","following_url":"https://api.github.com/users/zalando/following{/other_user}","gists_url":"https://api.github.com/users/zalando/gists{/gist_id}","starred_url":"https://api.github.com/users/zalando/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zalando/subscriptions","organizations_url":"https://api.github.com/users/zalando/orgs","repos_url":"https://api.github.com/users/zalando/repos","events_url":"https://api.github.com/users/zalando/events{/privacy}","received_events_url":"https://api.github.com/users/zalando/received_events","type":"Organization","site_admin":false},"repo":{"id":44234368,"name":"nakadi","full_name":"zalando/nakadi","owner":{"login":"zalando","id":1564818,"avatar_url":"https://avatars.githubusercontent.com/u/1564818?v=3","gravatar_id":"","url":"https://api.github.com/users/zalando","html_url":"https://github.com/zalando","followers_url":"https://api.github.com/users/zalando/followers","following_url":"https://api.github.com/users/zalando/following{/other_user}","gists_url":"https://api.github.com/users/zalando/gists{/gist_id}","starred_url":"https://api.github.com/users/zalando/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zalando/subscriptions","organizations_url":"https://api.github.com/users/zalando/orgs","repos_url":"https://api.github.com/users/zalando/repos","events_url":"https://api.github.com/users/zalando/events{/privacy}","received_events_url":"https://api.github.com/users/zalando/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/zalando/nakadi","description":"A distributed event bus that implements a RESTful API abstraction instead of Kafka-like queues","fork":false,"url":"https://api.github.com/repos/zalando/nakadi","forks_url":"https://api.github.com/repos/zalando/nakadi/forks","keys_url":"https://api.github.com/repos/zalando/nakadi/keys{/key_id}","collaborators_url":"https://api.github.com/repos/zalando/nakadi/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/zalando/nakadi/teams","hooks_url":"https://api.github.com/repos/zalando/nakadi/hooks","issue_events_url":"https://api.github.com/repos/zalando/nakadi/issues/events{/number}","events_url":"https://api.github.com/repos/zalando/nakadi/events","assignees_url":"https://api.github.com/repos/zalando/nakadi/assignees{/user}","branches_url":"https://api.github.com/repos/zalando/nakadi/branches{/branch}","tags_url":"https://api.github.com/repos/zalando/nakadi/tags","blobs_url":"https://api.github.com/repos/zalando/nakadi/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/zalando/nakadi/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/zalando/nakadi/git/refs{/sha}","trees_url":"https://api.github.com/repos/zalando/nakadi/git/trees{/sha}","statuses_url":"https://api.github.com/repos/zalando/nakadi/statuses/{sha}","languages_url":"https://api.github.com/repos/zalando/nakadi/languages","stargazers_url":"https://api.github.com/repos/zalando/nakadi/stargazers","contributors_url":"https://api.github.com/repos/zalando/nakadi/contributors","subscribers_url":"https://api.github.com/repos/zalando/nakadi/subscribers","subscription_url":"https://api.github.com/repos/zalando/nakadi/subscription","commits_url":"https://api.github.com/repos/zalando/nakadi/commits{/sha}","git_commits_url":"https://api.github.com/repos/zalando/nakadi/git/commits{/sha}","comments_url":"https://api.github.com/repos/zalando/nakadi/comments{/number}","issue_comment_url":"https://api.github.com/repos/zalando/nakadi/issues/comments{/number}","contents_url":"https://api.github.com/repos/zalando/nakadi/contents/{+path}","compare_url":"https://api.github.com/repos/zalando/nakadi/compare/{base}...{head}","merges_url":"https://api.github.com/repos/zalando/nakadi/merges","archive_url":"https://api.github.com/repos/zalando/nakadi/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/zalando/nakadi/downloads","issues_url":"https://api.github.com/repos/zalando/nakadi/issues{/number}","pulls_url":"https://api.github.com/repos/zalando/nakadi/pulls{/number}","milestones_url":"https://api.github.com/repos/zalando/nakadi/milestones{/number}","notifications_url":"https://api.github.com/repos/zalando/nakadi/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/zalando/nakadi/labels{/name}","releases_url":"https://api.github.com/repos/zalando/nakadi/releases{/id}","deployments_url":"https://api.github.com/repos/zalando/nakadi/deployments","created_at":"2015-10-14T08:30:17Z","updated_at":"2016-08-03T01:12:54Z","pushed_at":"2016-08-03T14:27:35Z","git_url":"git://github.com/zalando/nakadi.git","ssh_url":"git@github.com:zalando/nakadi.git","clone_url":"https://github.com/zalando/nakadi.git","svn_url":"https://github.com/zalando/nakadi","homepage":"","size":3461,"stargazers_count":31,"watchers_count":31,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":20,"mirror_url":null,"open_issues_count":10,"forks":20,"open_issues":10,"watchers":31,"default_branch":"master"}},"base":{"label":"zalando:nakadi-jvm","ref":"nakadi-jvm","sha":"bf447f0cd03186bd5ae76f575489ef7f4ee083b9","user":{"login":"zalando","id":1564818,"avatar_url":"https://avatars.githubusercontent.com/u/1564818?v=3","gravatar_id":"","url":"https://api.github.com/users/zalando","html_url":"https://github.com/zalando","followers_url":"https://api.github.com/users/zalando/followers","following_url":"https://api.github.com/users/zalando/following{/other_user}","gists_url":"https://api.github.com/users/zalando/gists{/gist_id}","starred_url":"https://api.github.com/users/zalando/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zalando/subscriptions","organizations_url":"https://api.github.com/users/zalando/orgs","repos_url":"https://api.github.com/users/zalando/repos","events_url":"https://api.github.com/users/zalando/events{/privacy}","received_events_url":"https://api.github.com/users/zalando/received_events","type":"Organization","site_admin":false},"repo":{"id":44234368,"name":"nakadi","full_name":"zalando/nakadi","owner":{"login":"zalando","id":1564818,"avatar_url":"https://avatars.githubusercontent.com/u/1564818?v=3","gravatar_id":"","url":"https://api.github.com/users/zalando","html_url":"https://github.com/zalando","followers_url":"https://api.github.com/users/zalando/followers","following_url":"https://api.github.com/users/zalando/following{/other_user}","gists_url":"https://api.github.com/users/zalando/gists{/gist_id}","starred_url":"https://api.github.com/users/zalando/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zalando/subscriptions","organizations_url":"https://api.github.com/users/zalando/orgs","repos_url":"https://api.github.com/users/zalando/repos","events_url":"https://api.github.com/users/zalando/events{/privacy}","received_events_url":"https://api.github.com/users/zalando/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/zalando/nakadi","description":"A distributed event bus that implements a RESTful API abstraction instead of Kafka-like queues","fork":false,"url":"https://api.github.com/repos/zalando/nakadi","forks_url":"https://api.github.com/repos/zalando/nakadi/forks","keys_url":"https://api.github.com/repos/zalando/nakadi/keys{/key_id}","collaborators_url":"https://api.github.com/repos/zalando/nakadi/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/zalando/nakadi/teams","hooks_url":"https://api.github.com/repos/zalando/nakadi/hooks","issue_events_url":"https://api.github.com/repos/zalando/nakadi/issues/events{/number}","events_url":"https://api.github.com/repos/zalando/nakadi/events","assignees_url":"https://api.github.com/repos/zalando/nakadi/assignees{/user}","branches_url":"https://api.github.com/repos/zalando/nakadi/branches{/branch}","tags_url":"https://api.github.com/repos/zalando/nakadi/tags","blobs_url":"https://api.github.com/repos/zalando/nakadi/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/zalando/nakadi/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/zalando/nakadi/git/refs{/sha}","trees_url":"https://api.github.com/repos/zalando/nakadi/git/trees{/sha}","statuses_url":"https://api.github.com/repos/zalando/nakadi/statuses/{sha}","languages_url":"https://api.github.com/repos/zalando/nakadi/languages","stargazers_url":"https://api.github.com/repos/zalando/nakadi/stargazers","contributors_url":"https://api.github.com/repos/zalando/nakadi/contributors","subscribers_url":"https://api.github.com/repos/zalando/nakadi/subscribers","subscription_url":"https://api.github.com/repos/zalando/nakadi/subscription","commits_url":"https://api.github.com/repos/zalando/nakadi/commits{/sha}","git_commits_url":"https://api.github.com/repos/zalando/nakadi/git/commits{/sha}","comments_url":"https://api.github.com/repos/zalando/nakadi/comments{/number}","issue_comment_url":"https://api.github.com/repos/zalando/nakadi/issues/comments{/number}","contents_url":"https://api.github.com/repos/zalando/nakadi/contents/{+path}","compare_url":"https://api.github.com/repos/zalando/nakadi/compare/{base}...{head}","merges_url":"https://api.github.com/repos/zalando/nakadi/merges","archive_url":"https://api.github.com/repos/zalando/nakadi/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/zalando/nakadi/downloads","issues_url":"https://api.github.com/repos/zalando/nakadi/issues{/number}","pulls_url":"https://api.github.com/repos/zalando/nakadi/pulls{/number}","milestones_url":"https://api.github.com/repos/zalando/nakadi/milestones{/number}","notifications_url":"https://api.github.com/repos/zalando/nakadi/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/zalando/nakadi/labels{/name}","releases_url":"https://api.github.com/repos/zalando/nakadi/releases{/id}","deployments_url":"https://api.github.com/repos/zalando/nakadi/deployments","created_at":"2015-10-14T08:30:17Z","updated_at":"2016-08-03T01:12:54Z","pushed_at":"2016-08-03T14:27:35Z","git_url":"git://github.com/zalando/nakadi.git","ssh_url":"git@github.com:zalando/nakadi.git","clone_url":"https://github.com/zalando/nakadi.git","svn_url":"https://github.com/zalando/nakadi","homepage":"","size":3461,"stargazers_count":31,"watchers_count":31,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":20,"mirror_url":null,"open_issues_count":10,"forks":20,"open_issues":10,"watchers":31,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/zalando/nakadi/pulls/353"},"html":{"href":"https://github.com/zalando/nakadi/pull/353"},"issue":{"href":"https://api.github.com/repos/zalando/nakadi/issues/353"},"comments":{"href":"https://api.github.com/repos/zalando/nakadi/issues/353/comments"},"review_comments":{"href":"https://api.github.com/repos/zalando/nakadi/pulls/353/comments"},"review_comment":{"href":"https://api.github.com/repos/zalando/nakadi/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/zalando/nakadi/pulls/353/commits"},"statuses":{"href":"https://api.github.com/repos/zalando/nakadi/statuses/03d883e8e376411891cadc890ad26a8b8ae1e470"}}}}
{"actor":{"display_login":"v-stepanov"}}