<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="plusDomains_v1.html">Google+ Domains API</a> . <a href="plusDomains_v1.circles.html">circles</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#addPeople">addPeople(circleId, userId=None, email=None)</a></code></p>
<p class="firstline">Add a person to a circle. Google+ limits certain circle operations, including the number of circle adds. Learn More.</p>
<p class="toc_element">
  <code><a href="#get">get(circleId)</a></code></p>
<p class="firstline">Get a circle.</p>
<p class="toc_element">
  <code><a href="#insert">insert(userId, body)</a></code></p>
<p class="firstline">Create a new circle for the authenticated user.</p>
<p class="toc_element">
  <code><a href="#list">list(userId, pageToken=None, maxResults=None)</a></code></p>
<p class="firstline">List all of the circles for a user.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(circleId, body)</a></code></p>
<p class="firstline">Update a circle's description. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#remove">remove(circleId)</a></code></p>
<p class="firstline">Delete a circle.</p>
<p class="toc_element">
  <code><a href="#removePeople">removePeople(circleId, userId=None, email=None)</a></code></p>
<p class="firstline">Remove a person from a circle.</p>
<p class="toc_element">
  <code><a href="#update">update(circleId, body)</a></code></p>
<p class="firstline">Update a circle's description.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="addPeople">addPeople(circleId, userId=None, email=None)</code>
  <pre>Add a person to a circle. Google+ limits certain circle operations, including the number of circle adds. Learn More.

Args:
  circleId: string, The ID of the circle to add the person to. (required)
  userId: string, IDs of the people to add to the circle. Optional, can be repeated. (repeated)
  email: string, Email of the people to add to the circle. Optional, can be repeated. (repeated)

Returns:
  An object of the form:

    {
      "kind": "plus#circle", # Identifies this resource as a circle. Value: "plus#circle".
      "displayName": "A String", # The circle name.
      "description": "A String", # The description of this circle.
      "people": { # The people in this circle.
        "totalItems": 42, # The total number of people in this circle.
      },
      "etag": "A String", # ETag of this response for caching purposes.
      "id": "A String", # The ID of the circle.
      "selfLink": "A String", # Link to this circle resource
    }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(circleId)</code>
  <pre>Get a circle.

Args:
  circleId: string, The ID of the circle to get. (required)

Returns:
  An object of the form:

    {
      "kind": "plus#circle", # Identifies this resource as a circle. Value: "plus#circle".
      "displayName": "A String", # The circle name.
      "description": "A String", # The description of this circle.
      "people": { # The people in this circle.
        "totalItems": 42, # The total number of people in this circle.
      },
      "etag": "A String", # ETag of this response for caching purposes.
      "id": "A String", # The ID of the circle.
      "selfLink": "A String", # Link to this circle resource
    }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(userId, body)</code>
  <pre>Create a new circle for the authenticated user.

Args:
  userId: string, The ID of the user to create the circle on behalf of. The value "me" can be used to indicate the authenticated user. (required)
  body: object, The request body. (required)
    The object takes the form of:

{
    "kind": "plus#circle", # Identifies this resource as a circle. Value: "plus#circle".
    "displayName": "A String", # The circle name.
    "description": "A String", # The description of this circle.
    "people": { # The people in this circle.
      "totalItems": 42, # The total number of people in this circle.
    },
    "etag": "A String", # ETag of this response for caching purposes.
    "id": "A String", # The ID of the circle.
    "selfLink": "A String", # Link to this circle resource
  }


Returns:
  An object of the form:

    {
      "kind": "plus#circle", # Identifies this resource as a circle. Value: "plus#circle".
      "displayName": "A String", # The circle name.
      "description": "A String", # The description of this circle.
      "people": { # The people in this circle.
        "totalItems": 42, # The total number of people in this circle.
      },
      "etag": "A String", # ETag of this response for caching purposes.
      "id": "A String", # The ID of the circle.
      "selfLink": "A String", # Link to this circle resource
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(userId, pageToken=None, maxResults=None)</code>
  <pre>List all of the circles for a user.

Args:
  userId: string, The ID of the user to get circles for. The special value "me" can be used to indicate the authenticated user. (required)
  pageToken: string, The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of "nextPageToken" from the previous response.
  maxResults: integer, The maximum number of circles to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.

Returns:
  An object of the form:

    {
    "nextPageToken": "A String", # The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results.
    "kind": "plus#circleFeed", # Identifies this resource as a collection of circles. Value: "plus#circleFeed".
    "title": "A String", # The title of this list of resources.
    "items": [ # The circles in this page of results.
      {
          "kind": "plus#circle", # Identifies this resource as a circle. Value: "plus#circle".
          "displayName": "A String", # The circle name.
          "description": "A String", # The description of this circle.
          "people": { # The people in this circle.
            "totalItems": 42, # The total number of people in this circle.
          },
          "etag": "A String", # ETag of this response for caching purposes.
          "id": "A String", # The ID of the circle.
          "selfLink": "A String", # Link to this circle resource
        },
    ],
    "nextLink": "A String", # Link to the next page of circles.
    "etag": "A String", # ETag of this response for caching purposes.
    "totalItems": 42, # The total number of circles. The number of circles in this response may be smaller due to paging.
    "selfLink": "A String", # Link to this page of circles.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(circleId, body)</code>
  <pre>Update a circle's description. This method supports patch semantics.

Args:
  circleId: string, The ID of the circle to update. (required)
  body: object, The request body. (required)
    The object takes the form of:

{
    "kind": "plus#circle", # Identifies this resource as a circle. Value: "plus#circle".
    "displayName": "A String", # The circle name.
    "description": "A String", # The description of this circle.
    "people": { # The people in this circle.
      "totalItems": 42, # The total number of people in this circle.
    },
    "etag": "A String", # ETag of this response for caching purposes.
    "id": "A String", # The ID of the circle.
    "selfLink": "A String", # Link to this circle resource
  }


Returns:
  An object of the form:

    {
      "kind": "plus#circle", # Identifies this resource as a circle. Value: "plus#circle".
      "displayName": "A String", # The circle name.
      "description": "A String", # The description of this circle.
      "people": { # The people in this circle.
        "totalItems": 42, # The total number of people in this circle.
      },
      "etag": "A String", # ETag of this response for caching purposes.
      "id": "A String", # The ID of the circle.
      "selfLink": "A String", # Link to this circle resource
    }</pre>
</div>

<div class="method">
    <code class="details" id="remove">remove(circleId)</code>
  <pre>Delete a circle.

Args:
  circleId: string, The ID of the circle to delete. (required)
</pre>
</div>

<div class="method">
    <code class="details" id="removePeople">removePeople(circleId, userId=None, email=None)</code>
  <pre>Remove a person from a circle.

Args:
  circleId: string, The ID of the circle to remove the person from. (required)
  userId: string, IDs of the people to remove from the circle. Optional, can be repeated. (repeated)
  email: string, Email of the people to add to the circle. Optional, can be repeated. (repeated)
</pre>
</div>

<div class="method">
    <code class="details" id="update">update(circleId, body)</code>
  <pre>Update a circle's description.

Args:
  circleId: string, The ID of the circle to update. (required)
  body: object, The request body. (required)
    The object takes the form of:

{
    "kind": "plus#circle", # Identifies this resource as a circle. Value: "plus#circle".
    "displayName": "A String", # The circle name.
    "description": "A String", # The description of this circle.
    "people": { # The people in this circle.
      "totalItems": 42, # The total number of people in this circle.
    },
    "etag": "A String", # ETag of this response for caching purposes.
    "id": "A String", # The ID of the circle.
    "selfLink": "A String", # Link to this circle resource
  }


Returns:
  An object of the form:

    {
      "kind": "plus#circle", # Identifies this resource as a circle. Value: "plus#circle".
      "displayName": "A String", # The circle name.
      "description": "A String", # The description of this circle.
      "people": { # The people in this circle.
        "totalItems": 42, # The total number of people in this circle.
      },
      "etag": "A String", # ETag of this response for caching purposes.
      "id": "A String", # The ID of the circle.
      "selfLink": "A String", # Link to this circle resource
    }</pre>
</div>

</body></html>