<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. When this note was trashed. If `trashed`, the note is eventually deleted. If the note is not trashed, this field 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 is eventually 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. When this note was trashed. If `trashed`, the note is eventually deleted. If the note is not trashed, this field 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 is eventually 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); }
}</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. When this note was trashed. If `trashed`, the note is eventually deleted. If the note is not trashed, this field 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 is eventually 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 `trashed` filter is applied by default. Valid fields to filter by are: `create_time`, `update_time`, `trash_time`, and `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.
  &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. When this note was trashed. If `trashed`, the note is eventually deleted. If the note is not trashed, this field 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 is eventually 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>