<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="books_v1.html">Books API</a> . <a href="books_v1.mylibrary.html">mylibrary</a> . <a href="books_v1.mylibrary.bookshelves.html">bookshelves</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="books_v1.mylibrary.bookshelves.volumes.html">volumes()</a></code>
</p>
<p class="firstline">Returns the volumes Resource.</p>

<p class="toc_element">
  <code><a href="#addVolume">addVolume(shelf, volumeId, source=None, reason=None)</a></code></p>
<p class="firstline">Adds a volume to a bookshelf.</p>
<p class="toc_element">
  <code><a href="#clearVolumes">clearVolumes(shelf, source=None)</a></code></p>
<p class="firstline">Clears all volumes from a bookshelf.</p>
<p class="toc_element">
  <code><a href="#get">get(shelf, source=None)</a></code></p>
<p class="firstline">Retrieves metadata for a specific bookshelf belonging to the authenticated user.</p>
<p class="toc_element">
  <code><a href="#list">list(source=None)</a></code></p>
<p class="firstline">Retrieves a list of bookshelves belonging to the authenticated user.</p>
<p class="toc_element">
  <code><a href="#moveVolume">moveVolume(shelf, volumeId, volumePosition, source=None)</a></code></p>
<p class="firstline">Moves a volume within a bookshelf.</p>
<p class="toc_element">
  <code><a href="#removeVolume">removeVolume(shelf, volumeId, source=None, reason=None)</a></code></p>
<p class="firstline">Removes a volume from a bookshelf.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="addVolume">addVolume(shelf, volumeId, source=None, reason=None)</code>
  <pre>Adds a volume to a bookshelf.

Args:
  shelf: string, ID of bookshelf to which to add a volume. (required)
  volumeId: string, ID of volume to add. (required)
  source: string, String to identify the originator of this request.
  reason: string, The reason for which the book is added to the library.
    Allowed values
      IOS_PREX - Volumes added from the PREX flow on iOS.
      IOS_SEARCH - Volumes added from the Search flow on iOS.
      ONBOARDING - Volumes added from the Onboarding flow.
</pre>
</div>

<div class="method">
    <code class="details" id="clearVolumes">clearVolumes(shelf, source=None)</code>
  <pre>Clears all volumes from a bookshelf.

Args:
  shelf: string, ID of bookshelf from which to remove a volume. (required)
  source: string, String to identify the originator of this request.
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(shelf, source=None)</code>
  <pre>Retrieves metadata for a specific bookshelf belonging to the authenticated user.

Args:
  shelf: string, ID of bookshelf to retrieve. (required)
  source: string, String to identify the originator of this request.

Returns:
  An object of the form:

    {
    "kind": "books#bookshelf", # Resource type for bookshelf metadata.
    "description": "A String", # Description of this bookshelf.
    "created": "A String", # Created time for this bookshelf (formatted UTC timestamp with millisecond resolution).
    "volumeCount": 42, # Number of volumes in this bookshelf.
    "title": "A String", # Title of this bookshelf.
    "updated": "A String", # Last modified time of this bookshelf (formatted UTC timestamp with millisecond resolution).
    "access": "A String", # Whether this bookshelf is PUBLIC or PRIVATE.
    "volumesLastUpdated": "A String", # Last time a volume was added or removed from this bookshelf (formatted UTC timestamp with millisecond resolution).
    "id": 42, # Id of this bookshelf, only unique by user.
    "selfLink": "A String", # URL to this resource.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(source=None)</code>
  <pre>Retrieves a list of bookshelves belonging to the authenticated user.

Args:
  source: string, String to identify the originator of this request.

Returns:
  An object of the form:

    {
    "items": [ # A list of bookshelves.
      {
        "kind": "books#bookshelf", # Resource type for bookshelf metadata.
        "description": "A String", # Description of this bookshelf.
        "created": "A String", # Created time for this bookshelf (formatted UTC timestamp with millisecond resolution).
        "volumeCount": 42, # Number of volumes in this bookshelf.
        "title": "A String", # Title of this bookshelf.
        "updated": "A String", # Last modified time of this bookshelf (formatted UTC timestamp with millisecond resolution).
        "access": "A String", # Whether this bookshelf is PUBLIC or PRIVATE.
        "volumesLastUpdated": "A String", # Last time a volume was added or removed from this bookshelf (formatted UTC timestamp with millisecond resolution).
        "id": 42, # Id of this bookshelf, only unique by user.
        "selfLink": "A String", # URL to this resource.
      },
    ],
    "kind": "books#bookshelves", # Resource type.
  }</pre>
</div>

<div class="method">
    <code class="details" id="moveVolume">moveVolume(shelf, volumeId, volumePosition, source=None)</code>
  <pre>Moves a volume within a bookshelf.

Args:
  shelf: string, ID of bookshelf with the volume. (required)
  volumeId: string, ID of volume to move. (required)
  volumePosition: integer, Position on shelf to move the item (0 puts the item before the current first item, 1 puts it between the first and the second and so on.) (required)
  source: string, String to identify the originator of this request.
</pre>
</div>

<div class="method">
    <code class="details" id="removeVolume">removeVolume(shelf, volumeId, source=None, reason=None)</code>
  <pre>Removes a volume from a bookshelf.

Args:
  shelf: string, ID of bookshelf from which to remove a volume. (required)
  volumeId: string, ID of volume to remove. (required)
  source: string, String to identify the originator of this request.
  reason: string, The reason for which the book is removed from the library.
    Allowed values
      ONBOARDING - Samples removed from the Onboarding flow.
</pre>
</div>

</body></html>