<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="keep_v1.html">Google Keep API</a> . <a href="keep_v1.notes.html">notes</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="keep_v1.notes.permissions.html">permissions()</a></code>
</p>
<p class="firstline">Returns the permissions Resource.</p>

<p class="toc_element">
  <code><a href="#close">close()</a></code></p>
<p class="firstline">Close httplib2 connections.</p>
<p class="toc_element">
  <code><a href="#create">create(body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new note.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a note. Caller must have the `OWNER` role on the note to delete. Deleting a note removes the resource immediately and cannot be undone. Any collaborators will lose access to the note.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a note.</p>
<p class="toc_element">
  <code><a href="#list">list(filter=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists notes. Every list call returns a page of results with `page_size` as the upper bound of returned items. A `page_size` of zero allows the server to choose the upper bound. The ListNotesResponse contains at most `page_size` entries. If there are more things left to list, it provides a `next_page_token` value. (Page tokens are opaque values.) To get the next page of results, copy the result's `next_page_token` into the next request's `page_token`. Repeat until the `next_page_token` returned with a page of results is empty. ListNotes return consistent results in the face of concurrent changes, or signals that it cannot with an ABORTED error.</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>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="create">create(body=None, x__xgafv=None)</code>
  <pre>Creates a new note.

Args:
  body: object, The request body.
    The object takes the form of:

{ # A single note.
  &quot;attachments&quot;: [ # Output only. The attachments attached to this note.
    { # An attachment to a note.
      &quot;mimeType&quot;: [ # The MIME types (IANA media types) in which the attachment is available.
        &quot;A String&quot;,
      ],
      &quot;name&quot;: &quot;A String&quot;, # The resource name;
    },
  ],
  &quot;body&quot;: { # The content of the note. # The body of the note.
    &quot;list&quot;: { # The list of items for a single list note. # Used if this section&#x27;s content is a list.
      &quot;listItems&quot;: [ # The items in the list. The number of items must be less than 1,000.
        { # A single list item in a note&#x27;s list.
          &quot;checked&quot;: True or False, # Whether this item has been checked off or not.
          &quot;childListItems&quot;: [ # If set, list of list items nested under this list item. Only one level of nesting is allowed.
            # Object with schema name: ListItem
          ],
          &quot;text&quot;: { # The block of text for a single text section or list item. # The text of this item. Length must be less than 1,000 characters.
            &quot;text&quot;: &quot;A String&quot;, # The text of the note. The limits on this vary with the specific field using this type.
          },
        },
      ],
    },
    &quot;text&quot;: { # The block of text for a single text section or list item. # Used if this section&#x27;s content is a block of text. The length of the text content must be less than 20,000 characters.
      &quot;text&quot;: &quot;A String&quot;, # The text of the note. The limits on this vary with the specific field using this type.
    },
  },
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. When this note was created.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of this note. See general note on identifiers in KeepService.
  &quot;permissions&quot;: [ # Output only. The list of permissions set on the note. Contains at least one entry for the note owner.
    { # A single permission on the note. Associates a `member` with a `role`.
      &quot;deleted&quot;: True or False, # Output only. Whether this member has been deleted. If the member is recovered, this value is set to false and the recovered member retains the role on the note.
      &quot;email&quot;: &quot;A String&quot;, # The email associated with the member. If set on create, the email field in the User or Group message must either be empty or match this field. On read, may be unset if the member does not have an associated email.
      &quot;family&quot;: { # Describes a single Google Family. # Output only. The Google Family to which this role applies.
      },
      &quot;group&quot;: { # Describes a single Group. # Output only. The group to which this role applies.
        &quot;email&quot;: &quot;A String&quot;, # The group email.
      },
      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name.
      &quot;role&quot;: &quot;A String&quot;, # The role granted by this permission. The role determines the entity’s ability to read, write, and share notes.
      &quot;user&quot;: { # Describes a single user. # Output only. The user to whom this role applies.
        &quot;email&quot;: &quot;A String&quot;, # The user&#x27;s email.
      },
    },
  ],
  &quot;title&quot;: &quot;A String&quot;, # The title of the note. Length must be less than 1,000 characters.
  &quot;trashTime&quot;: &quot;A String&quot;, # Output only. If this note has been trashed, when that happened. If trashed, the note will eventually be deleted. If the note is not trashed, this is not set (and the trashed field is false).
  &quot;trashed&quot;: True or False, # Output only. True if this note has been trashed. If trashed, the note will eventually be deleted.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. When this note was last modified.
}

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A single note.
  &quot;attachments&quot;: [ # Output only. The attachments attached to this note.
    { # An attachment to a note.
      &quot;mimeType&quot;: [ # The MIME types (IANA media types) in which the attachment is available.
        &quot;A String&quot;,
      ],
      &quot;name&quot;: &quot;A String&quot;, # The resource name;
    },
  ],
  &quot;body&quot;: { # The content of the note. # The body of the note.
    &quot;list&quot;: { # The list of items for a single list note. # Used if this section&#x27;s content is a list.
      &quot;listItems&quot;: [ # The items in the list. The number of items must be less than 1,000.
        { # A single list item in a note&#x27;s list.
          &quot;checked&quot;: True or False, # Whether this item has been checked off or not.
          &quot;childListItems&quot;: [ # If set, list of list items nested under this list item. Only one level of nesting is allowed.
            # Object with schema name: ListItem
          ],
          &quot;text&quot;: { # The block of text for a single text section or list item. # The text of this item. Length must be less than 1,000 characters.
            &quot;text&quot;: &quot;A String&quot;, # The text of the note. The limits on this vary with the specific field using this type.
          },
        },
      ],
    },
    &quot;text&quot;: { # The block of text for a single text section or list item. # Used if this section&#x27;s content is a block of text. The length of the text content must be less than 20,000 characters.
      &quot;text&quot;: &quot;A String&quot;, # The text of the note. The limits on this vary with the specific field using this type.
    },
  },
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. When this note was created.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of this note. See general note on identifiers in KeepService.
  &quot;permissions&quot;: [ # Output only. The list of permissions set on the note. Contains at least one entry for the note owner.
    { # A single permission on the note. Associates a `member` with a `role`.
      &quot;deleted&quot;: True or False, # Output only. Whether this member has been deleted. If the member is recovered, this value is set to false and the recovered member retains the role on the note.
      &quot;email&quot;: &quot;A String&quot;, # The email associated with the member. If set on create, the email field in the User or Group message must either be empty or match this field. On read, may be unset if the member does not have an associated email.
      &quot;family&quot;: { # Describes a single Google Family. # Output only. The Google Family to which this role applies.
      },
      &quot;group&quot;: { # Describes a single Group. # Output only. The group to which this role applies.
        &quot;email&quot;: &quot;A String&quot;, # The group email.
      },
      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name.
      &quot;role&quot;: &quot;A String&quot;, # The role granted by this permission. The role determines the entity’s ability to read, write, and share notes.
      &quot;user&quot;: { # Describes a single user. # Output only. The user to whom this role applies.
        &quot;email&quot;: &quot;A String&quot;, # The user&#x27;s email.
      },
    },
  ],
  &quot;title&quot;: &quot;A String&quot;, # The title of the note. Length must be less than 1,000 characters.
  &quot;trashTime&quot;: &quot;A String&quot;, # Output only. If this note has been trashed, when that happened. If trashed, the note will eventually be deleted. If the note is not trashed, this is not set (and the trashed field is false).
  &quot;trashed&quot;: True or False, # Output only. True if this note has been trashed. If trashed, the note will eventually be deleted.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. When this note was last modified.
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes a note. Caller must have the `OWNER` role on the note to delete. Deleting a note removes the resource immediately and cannot be undone. Any collaborators will lose access to the note.

Args:
  name: string, Required. Name of the note to delete. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A typical example is to use it as the request or the response type of an API method. For instance: service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); } The JSON representation for `Empty` is empty JSON object `{}`.
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets a note.

Args:
  name: string, Required. Name of the resource. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A single note.
  &quot;attachments&quot;: [ # Output only. The attachments attached to this note.
    { # An attachment to a note.
      &quot;mimeType&quot;: [ # The MIME types (IANA media types) in which the attachment is available.
        &quot;A String&quot;,
      ],
      &quot;name&quot;: &quot;A String&quot;, # The resource name;
    },
  ],
  &quot;body&quot;: { # The content of the note. # The body of the note.
    &quot;list&quot;: { # The list of items for a single list note. # Used if this section&#x27;s content is a list.
      &quot;listItems&quot;: [ # The items in the list. The number of items must be less than 1,000.
        { # A single list item in a note&#x27;s list.
          &quot;checked&quot;: True or False, # Whether this item has been checked off or not.
          &quot;childListItems&quot;: [ # If set, list of list items nested under this list item. Only one level of nesting is allowed.
            # Object with schema name: ListItem
          ],
          &quot;text&quot;: { # The block of text for a single text section or list item. # The text of this item. Length must be less than 1,000 characters.
            &quot;text&quot;: &quot;A String&quot;, # The text of the note. The limits on this vary with the specific field using this type.
          },
        },
      ],
    },
    &quot;text&quot;: { # The block of text for a single text section or list item. # Used if this section&#x27;s content is a block of text. The length of the text content must be less than 20,000 characters.
      &quot;text&quot;: &quot;A String&quot;, # The text of the note. The limits on this vary with the specific field using this type.
    },
  },
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. When this note was created.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of this note. See general note on identifiers in KeepService.
  &quot;permissions&quot;: [ # Output only. The list of permissions set on the note. Contains at least one entry for the note owner.
    { # A single permission on the note. Associates a `member` with a `role`.
      &quot;deleted&quot;: True or False, # Output only. Whether this member has been deleted. If the member is recovered, this value is set to false and the recovered member retains the role on the note.
      &quot;email&quot;: &quot;A String&quot;, # The email associated with the member. If set on create, the email field in the User or Group message must either be empty or match this field. On read, may be unset if the member does not have an associated email.
      &quot;family&quot;: { # Describes a single Google Family. # Output only. The Google Family to which this role applies.
      },
      &quot;group&quot;: { # Describes a single Group. # Output only. The group to which this role applies.
        &quot;email&quot;: &quot;A String&quot;, # The group email.
      },
      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name.
      &quot;role&quot;: &quot;A String&quot;, # The role granted by this permission. The role determines the entity’s ability to read, write, and share notes.
      &quot;user&quot;: { # Describes a single user. # Output only. The user to whom this role applies.
        &quot;email&quot;: &quot;A String&quot;, # The user&#x27;s email.
      },
    },
  ],
  &quot;title&quot;: &quot;A String&quot;, # The title of the note. Length must be less than 1,000 characters.
  &quot;trashTime&quot;: &quot;A String&quot;, # Output only. If this note has been trashed, when that happened. If trashed, the note will eventually be deleted. If the note is not trashed, this is not set (and the trashed field is false).
  &quot;trashed&quot;: True or False, # Output only. True if this note has been trashed. If trashed, the note will eventually be deleted.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. When this note was last modified.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(filter=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists notes. Every list call returns a page of results with `page_size` as the upper bound of returned items. A `page_size` of zero allows the server to choose the upper bound. The ListNotesResponse contains at most `page_size` entries. If there are more things left to list, it provides a `next_page_token` value. (Page tokens are opaque values.) To get the next page of results, copy the result&#x27;s `next_page_token` into the next request&#x27;s `page_token`. Repeat until the `next_page_token` returned with a page of results is empty. ListNotes return consistent results in the face of concurrent changes, or signals that it cannot with an ABORTED error.

Args:
  filter: string, Filter for list results. If no filter is supplied, the &quot;-trashed&quot; filter is applied by default. Valid fields to filter by are: - `create_time` - `update_time` - `trash_time` - `trashed` Filter syntax follows the Google AIP filtering spec: https://aip.dev/160
  pageSize: integer, The maximum number of results to return.
  pageToken: string, The previous page&#x27;s `next_page_token` field.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # The response when listing a page of notes (see KeepService documentation).
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Next page&#x27;s `page_token` field.
  &quot;notes&quot;: [ # A page of notes.
    { # A single note.
      &quot;attachments&quot;: [ # Output only. The attachments attached to this note.
        { # An attachment to a note.
          &quot;mimeType&quot;: [ # The MIME types (IANA media types) in which the attachment is available.
            &quot;A String&quot;,
          ],
          &quot;name&quot;: &quot;A String&quot;, # The resource name;
        },
      ],
      &quot;body&quot;: { # The content of the note. # The body of the note.
        &quot;list&quot;: { # The list of items for a single list note. # Used if this section&#x27;s content is a list.
          &quot;listItems&quot;: [ # The items in the list. The number of items must be less than 1,000.
            { # A single list item in a note&#x27;s list.
              &quot;checked&quot;: True or False, # Whether this item has been checked off or not.
              &quot;childListItems&quot;: [ # If set, list of list items nested under this list item. Only one level of nesting is allowed.
                # Object with schema name: ListItem
              ],
              &quot;text&quot;: { # The block of text for a single text section or list item. # The text of this item. Length must be less than 1,000 characters.
                &quot;text&quot;: &quot;A String&quot;, # The text of the note. The limits on this vary with the specific field using this type.
              },
            },
          ],
        },
        &quot;text&quot;: { # The block of text for a single text section or list item. # Used if this section&#x27;s content is a block of text. The length of the text content must be less than 20,000 characters.
          &quot;text&quot;: &quot;A String&quot;, # The text of the note. The limits on this vary with the specific field using this type.
        },
      },
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. When this note was created.
      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of this note. See general note on identifiers in KeepService.
      &quot;permissions&quot;: [ # Output only. The list of permissions set on the note. Contains at least one entry for the note owner.
        { # A single permission on the note. Associates a `member` with a `role`.
          &quot;deleted&quot;: True or False, # Output only. Whether this member has been deleted. If the member is recovered, this value is set to false and the recovered member retains the role on the note.
          &quot;email&quot;: &quot;A String&quot;, # The email associated with the member. If set on create, the email field in the User or Group message must either be empty or match this field. On read, may be unset if the member does not have an associated email.
          &quot;family&quot;: { # Describes a single Google Family. # Output only. The Google Family to which this role applies.
          },
          &quot;group&quot;: { # Describes a single Group. # Output only. The group to which this role applies.
            &quot;email&quot;: &quot;A String&quot;, # The group email.
          },
          &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name.
          &quot;role&quot;: &quot;A String&quot;, # The role granted by this permission. The role determines the entity’s ability to read, write, and share notes.
          &quot;user&quot;: { # Describes a single user. # Output only. The user to whom this role applies.
            &quot;email&quot;: &quot;A String&quot;, # The user&#x27;s email.
          },
        },
      ],
      &quot;title&quot;: &quot;A String&quot;, # The title of the note. Length must be less than 1,000 characters.
      &quot;trashTime&quot;: &quot;A String&quot;, # Output only. If this note has been trashed, when that happened. If trashed, the note will eventually be deleted. If the note is not trashed, this is not set (and the trashed field is false).
      &quot;trashed&quot;: True or False, # Output only. True if this note has been trashed. If trashed, the note will eventually be deleted.
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. When this note was last modified.
    },
  ],
}</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 &#x27;execute()&#x27; on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

</body></html>