<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.layers.html">layers</a> . <a href="books_v1.layers.annotationData.html">annotationData</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#get">get(volumeId, layerId, annotationDataId, contentVersion, scale=None, allowWebDefinitions=None, w=None, source=None, h=None, locale=None)</a></code></p>
<p class="firstline">Gets the annotation data.</p>
<p class="toc_element">
  <code><a href="#list">list(volumeId, layerId, contentVersion, locale=None, scale=None, pageToken=None, updatedMin=None, source=None, updatedMax=None, maxResults=None, annotationDataId=None, w=None, h=None)</a></code></p>
<p class="firstline">Gets the annotation data for a volume and layer.</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="get">get(volumeId, layerId, annotationDataId, contentVersion, scale=None, allowWebDefinitions=None, w=None, source=None, h=None, locale=None)</code>
  <pre>Gets the annotation data.

Args:
  volumeId: string, The volume to retrieve annotations for. (required)
  layerId: string, The ID for the layer to get the annotations. (required)
  annotationDataId: string, The ID of the annotation data to retrieve. (required)
  contentVersion: string, The content version for the volume you are trying to retrieve. (required)
  scale: integer, The requested scale for the image.
  allowWebDefinitions: boolean, For the dictionary layer. Whether or not to allow web definitions.
  w: integer, The requested pixel width for any images. If width is provided height must also be provided.
  source: string, String to identify the originator of this request.
  h: integer, The requested pixel height for any images. If height is provided width must also be provided.
  locale: string, The locale information for the data. ISO-639-1 language and ISO-3166-1 country code. Ex: 'en_US'.

Returns:
  An object of the form:

    {
    "annotationType": "A String", # The type of annotation this data is for.
    "kind": "books#annotationdata", # Resource Type
    "updated": "A String", # Timestamp for the last time this data was updated. (RFC 3339 UTC date-time format).
    "volumeId": "A String", # The volume id for this data. *
    "encoded_data": "A String", # Base64 encoded data for this annotation data.
    "layerId": "A String", # The Layer id for this data. *
    "data": "",
    "id": "A String", # Unique id for this annotation data.
    "selfLink": "A String", # URL for this resource. *
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(volumeId, layerId, contentVersion, locale=None, scale=None, pageToken=None, updatedMin=None, source=None, updatedMax=None, maxResults=None, annotationDataId=None, w=None, h=None)</code>
  <pre>Gets the annotation data for a volume and layer.

Args:
  volumeId: string, The volume to retrieve annotation data for. (required)
  layerId: string, The ID for the layer to get the annotation data. (required)
  contentVersion: string, The content version for the requested volume. (required)
  locale: string, The locale information for the data. ISO-639-1 language and ISO-3166-1 country code. Ex: 'en_US'.
  scale: integer, The requested scale for the image.
  pageToken: string, The value of the nextToken from the previous page.
  updatedMin: string, RFC 3339 timestamp to restrict to items updated since this timestamp (inclusive).
  source: string, String to identify the originator of this request.
  updatedMax: string, RFC 3339 timestamp to restrict to items updated prior to this timestamp (exclusive).
  maxResults: integer, Maximum number of results to return
  annotationDataId: string, The list of Annotation Data Ids to retrieve. Pagination is ignored if this is set. (repeated)
  w: integer, The requested pixel width for any images. If width is provided height must also be provided.
  h: integer, The requested pixel height for any images. If height is provided width must also be provided.

Returns:
  An object of the form:

    {
    "nextPageToken": "A String", # Token to pass in for pagination for the next page. This will not be present if this request does not have more results.
    "items": [ # A list of Annotation Data.
      {
        "annotationType": "A String", # The type of annotation this data is for.
        "kind": "books#annotationdata", # Resource Type
        "updated": "A String", # Timestamp for the last time this data was updated. (RFC 3339 UTC date-time format).
        "volumeId": "A String", # The volume id for this data. *
        "encoded_data": "A String", # Base64 encoded data for this annotation data.
        "layerId": "A String", # The Layer id for this data. *
        "data": "",
        "id": "A String", # Unique id for this annotation data.
        "selfLink": "A String", # URL for this resource. *
      },
    ],
    "kind": "books#annotationsdata", # Resource type
    "totalItems": 42, # The total number of volume annotations found.
  }</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>

</body></html>