<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="aiplatform_v1beta1.html">Vertex AI API</a> . <a href="aiplatform_v1beta1.projects.html">projects</a> . <a href="aiplatform_v1beta1.projects.locations.html">locations</a> . <a href="aiplatform_v1beta1.projects.locations.datasets.html">datasets</a> . <a href="aiplatform_v1beta1.projects.locations.datasets.dataItems.html">dataItems</a> . <a href="aiplatform_v1beta1.projects.locations.datasets.dataItems.annotations.html">annotations</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="aiplatform_v1beta1.projects.locations.datasets.dataItems.annotations.operations.html">operations()</a></code>
</p>
<p class="firstline">Returns the operations 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="#list">list(parent, filter=None, orderBy=None, pageSize=None, pageToken=None, readMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists Annotations belongs to a dataitem</p>
<p class="toc_element">
  <code><a href="#list_next">list_next()</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="list">list(parent, filter=None, orderBy=None, pageSize=None, pageToken=None, readMask=None, x__xgafv=None)</code>
  <pre>Lists Annotations belongs to a dataitem

Args:
  parent: string, Required. The resource name of the DataItem to list Annotations from. Format: `projects/{project}/locations/{location}/datasets/{dataset}/dataItems/{data_item}` (required)
  filter: string, The standard list filter.
  orderBy: string, A comma-separated list of fields to order by, sorted in ascending order. Use &quot;desc&quot; after a field name for descending.
  pageSize: integer, The standard list page size.
  pageToken: string, The standard list page token.
  readMask: string, Mask specifying which fields to read.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Response message for DatasetService.ListAnnotations.
  &quot;annotations&quot;: [ # A list of Annotations that matches the specified filter in the request.
    { # Used to assign specific AnnotationSpec to a particular area of a DataItem or the whole part of the DataItem.
      &quot;annotationSource&quot;: { # References an API call. It contains more information about long running operation and Jobs that are triggered by the API call. # Output only. The source of the Annotation.
        &quot;dataLabelingJob&quot;: &quot;A String&quot;, # For API calls that start a LabelingJob. Resource name of the LabelingJob. Format: `projects/{project}/locations/{location}/dataLabelingJobs/{data_labeling_job}`
        &quot;method&quot;: &quot;A String&quot;, # The method name of the API RPC call. For example, &quot;/google.cloud.aiplatform.{apiVersion}.DatasetService.CreateDataset&quot;
        &quot;operation&quot;: &quot;A String&quot;, # For API calls that return a long running operation. Resource name of the long running operation. Format: `projects/{project}/locations/{location}/operations/{operation}`
      },
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. Timestamp when this Annotation was created.
      &quot;etag&quot;: &quot;A String&quot;, # Optional. Used to perform consistent read-modify-write updates. If not set, a blind &quot;overwrite&quot; update happens.
      &quot;labels&quot;: { # Optional. The labels with user-defined metadata to organize your Annotations. Label keys and values can be no longer than 64 characters (Unicode codepoints), can only contain lowercase letters, numeric characters, underscores and dashes. International characters are allowed. No more than 64 user labels can be associated with one Annotation(System labels are excluded). See https://goo.gl/xmQnxf for more information and examples of labels. System reserved label keys are prefixed with &quot;aiplatform.googleapis.com/&quot; and are immutable. Following system labels exist for each Annotation: * &quot;aiplatform.googleapis.com/annotation_set_name&quot;: optional, name of the UI&#x27;s annotation set this Annotation belongs to. If not set, the Annotation is not visible in the UI. * &quot;aiplatform.googleapis.com/payload_schema&quot;: output only, its value is the payload_schema&#x27;s title.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;name&quot;: &quot;A String&quot;, # Output only. Resource name of the Annotation.
      &quot;payload&quot;: &quot;&quot;, # Required. The schema of the payload can be found in payload_schema.
      &quot;payloadSchemaUri&quot;: &quot;A String&quot;, # Required. Google Cloud Storage URI points to a YAML file describing payload. The schema is defined as an [OpenAPI 3.0.2 Schema Object](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.2.md#schemaObject). The schema files that can be used here are found in gs://google-cloud-aiplatform/schema/dataset/annotation/, note that the chosen schema must be consistent with the parent Dataset&#x27;s metadata.
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. Timestamp when this Annotation was last updated.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # The standard List next-page token.
}</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next()</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>