<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="healthcare_v1.html">Cloud Healthcare API</a> . <a href="healthcare_v1.projects.html">projects</a> . <a href="healthcare_v1.projects.locations.html">locations</a> . <a href="healthcare_v1.projects.locations.datasets.html">datasets</a> . <a href="healthcare_v1.projects.locations.datasets.consentStores.html">consentStores</a> . <a href="healthcare_v1.projects.locations.datasets.consentStores.consentArtifacts.html">consentArtifacts</a></h1>
<h2>Instance Methods</h2>
<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(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new Consent artifact in the parent consent store.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes the specified Consent artifact. Fails if the artifact is referenced by the latest revision of any Consent.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the specified Consent artifact.</p>
<p class="toc_element">
  <code><a href="#list">list(parent, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</a></code></p>
<p class="firstline">Lists the Consent artifacts in the specified consent store.</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(parent, body=None, x__xgafv=None)</code>
  <pre>Creates a new Consent artifact in the parent consent store.

Args:
  parent: string, Required. The name of the consent store this Consent artifact belongs to. (required)
  body: object, The request body.
    The object takes the form of:

{ # Documentation of a user&#x27;s consent.
  &quot;consentContentScreenshots&quot;: [ # Optional. Screenshots, PDFs, or other binary information documenting the user&#x27;s consent.
    { # Raw bytes representing consent artifact content.
      &quot;gcsUri&quot;: &quot;A String&quot;, # Input only. Points to a Cloud Storage URI containing the consent artifact content. The URI must be in the following format: `gs://{bucket_id}/{object_id}`. The Cloud Healthcare API service account must have the `roles/storage.objectViewer` Cloud IAM role for this Cloud Storage location. The consent artifact content at this URI is copied to a Cloud Storage location managed by the Cloud Healthcare API. Responses to fetching requests return the consent artifact content in raw_bytes.
      &quot;rawBytes&quot;: &quot;A String&quot;, # Consent artifact content represented as a stream of bytes. This field is populated when returned in GetConsentArtifact response, but not included in CreateConsentArtifact and ListConsentArtifact response.
    },
  ],
  &quot;consentContentVersion&quot;: &quot;A String&quot;, # Optional. An string indicating the version of the consent information shown to the user.
  &quot;guardianSignature&quot;: { # User signature. # Optional. A signature from a guardian.
    &quot;image&quot;: { # Raw bytes representing consent artifact content. # Optional. An image of the user&#x27;s signature.
      &quot;gcsUri&quot;: &quot;A String&quot;, # Input only. Points to a Cloud Storage URI containing the consent artifact content. The URI must be in the following format: `gs://{bucket_id}/{object_id}`. The Cloud Healthcare API service account must have the `roles/storage.objectViewer` Cloud IAM role for this Cloud Storage location. The consent artifact content at this URI is copied to a Cloud Storage location managed by the Cloud Healthcare API. Responses to fetching requests return the consent artifact content in raw_bytes.
      &quot;rawBytes&quot;: &quot;A String&quot;, # Consent artifact content represented as a stream of bytes. This field is populated when returned in GetConsentArtifact response, but not included in CreateConsentArtifact and ListConsentArtifact response.
    },
    &quot;metadata&quot;: { # Optional. Metadata associated with the user&#x27;s signature. For example, the user&#x27;s name or the user&#x27;s title.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;signatureTime&quot;: &quot;A String&quot;, # Optional. Timestamp of the signature.
    &quot;userId&quot;: &quot;A String&quot;, # Required. User&#x27;s UUID provided by the client.
  },
  &quot;metadata&quot;: { # Optional. Metadata associated with the Consent artifact. For example, the consent locale or user agent version.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # Resource name of the Consent artifact, of the form `projects/{project_id}/locations/{location_id}/datasets/{dataset_id}/consentStores/{consent_store_id}/consentArtifacts/{consent_artifact_id}`. Cannot be changed after creation.
  &quot;userId&quot;: &quot;A String&quot;, # Required. User&#x27;s UUID provided by the client.
  &quot;userSignature&quot;: { # User signature. # Optional. User&#x27;s signature.
    &quot;image&quot;: { # Raw bytes representing consent artifact content. # Optional. An image of the user&#x27;s signature.
      &quot;gcsUri&quot;: &quot;A String&quot;, # Input only. Points to a Cloud Storage URI containing the consent artifact content. The URI must be in the following format: `gs://{bucket_id}/{object_id}`. The Cloud Healthcare API service account must have the `roles/storage.objectViewer` Cloud IAM role for this Cloud Storage location. The consent artifact content at this URI is copied to a Cloud Storage location managed by the Cloud Healthcare API. Responses to fetching requests return the consent artifact content in raw_bytes.
      &quot;rawBytes&quot;: &quot;A String&quot;, # Consent artifact content represented as a stream of bytes. This field is populated when returned in GetConsentArtifact response, but not included in CreateConsentArtifact and ListConsentArtifact response.
    },
    &quot;metadata&quot;: { # Optional. Metadata associated with the user&#x27;s signature. For example, the user&#x27;s name or the user&#x27;s title.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;signatureTime&quot;: &quot;A String&quot;, # Optional. Timestamp of the signature.
    &quot;userId&quot;: &quot;A String&quot;, # Required. User&#x27;s UUID provided by the client.
  },
  &quot;witnessSignature&quot;: { # User signature. # Optional. A signature from a witness.
    &quot;image&quot;: { # Raw bytes representing consent artifact content. # Optional. An image of the user&#x27;s signature.
      &quot;gcsUri&quot;: &quot;A String&quot;, # Input only. Points to a Cloud Storage URI containing the consent artifact content. The URI must be in the following format: `gs://{bucket_id}/{object_id}`. The Cloud Healthcare API service account must have the `roles/storage.objectViewer` Cloud IAM role for this Cloud Storage location. The consent artifact content at this URI is copied to a Cloud Storage location managed by the Cloud Healthcare API. Responses to fetching requests return the consent artifact content in raw_bytes.
      &quot;rawBytes&quot;: &quot;A String&quot;, # Consent artifact content represented as a stream of bytes. This field is populated when returned in GetConsentArtifact response, but not included in CreateConsentArtifact and ListConsentArtifact response.
    },
    &quot;metadata&quot;: { # Optional. Metadata associated with the user&#x27;s signature. For example, the user&#x27;s name or the user&#x27;s title.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;signatureTime&quot;: &quot;A String&quot;, # Optional. Timestamp of the signature.
    &quot;userId&quot;: &quot;A String&quot;, # Required. User&#x27;s UUID provided by the client.
  },
}

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

Returns:
  An object of the form:

    { # Documentation of a user&#x27;s consent.
  &quot;consentContentScreenshots&quot;: [ # Optional. Screenshots, PDFs, or other binary information documenting the user&#x27;s consent.
    { # Raw bytes representing consent artifact content.
      &quot;gcsUri&quot;: &quot;A String&quot;, # Input only. Points to a Cloud Storage URI containing the consent artifact content. The URI must be in the following format: `gs://{bucket_id}/{object_id}`. The Cloud Healthcare API service account must have the `roles/storage.objectViewer` Cloud IAM role for this Cloud Storage location. The consent artifact content at this URI is copied to a Cloud Storage location managed by the Cloud Healthcare API. Responses to fetching requests return the consent artifact content in raw_bytes.
      &quot;rawBytes&quot;: &quot;A String&quot;, # Consent artifact content represented as a stream of bytes. This field is populated when returned in GetConsentArtifact response, but not included in CreateConsentArtifact and ListConsentArtifact response.
    },
  ],
  &quot;consentContentVersion&quot;: &quot;A String&quot;, # Optional. An string indicating the version of the consent information shown to the user.
  &quot;guardianSignature&quot;: { # User signature. # Optional. A signature from a guardian.
    &quot;image&quot;: { # Raw bytes representing consent artifact content. # Optional. An image of the user&#x27;s signature.
      &quot;gcsUri&quot;: &quot;A String&quot;, # Input only. Points to a Cloud Storage URI containing the consent artifact content. The URI must be in the following format: `gs://{bucket_id}/{object_id}`. The Cloud Healthcare API service account must have the `roles/storage.objectViewer` Cloud IAM role for this Cloud Storage location. The consent artifact content at this URI is copied to a Cloud Storage location managed by the Cloud Healthcare API. Responses to fetching requests return the consent artifact content in raw_bytes.
      &quot;rawBytes&quot;: &quot;A String&quot;, # Consent artifact content represented as a stream of bytes. This field is populated when returned in GetConsentArtifact response, but not included in CreateConsentArtifact and ListConsentArtifact response.
    },
    &quot;metadata&quot;: { # Optional. Metadata associated with the user&#x27;s signature. For example, the user&#x27;s name or the user&#x27;s title.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;signatureTime&quot;: &quot;A String&quot;, # Optional. Timestamp of the signature.
    &quot;userId&quot;: &quot;A String&quot;, # Required. User&#x27;s UUID provided by the client.
  },
  &quot;metadata&quot;: { # Optional. Metadata associated with the Consent artifact. For example, the consent locale or user agent version.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # Resource name of the Consent artifact, of the form `projects/{project_id}/locations/{location_id}/datasets/{dataset_id}/consentStores/{consent_store_id}/consentArtifacts/{consent_artifact_id}`. Cannot be changed after creation.
  &quot;userId&quot;: &quot;A String&quot;, # Required. User&#x27;s UUID provided by the client.
  &quot;userSignature&quot;: { # User signature. # Optional. User&#x27;s signature.
    &quot;image&quot;: { # Raw bytes representing consent artifact content. # Optional. An image of the user&#x27;s signature.
      &quot;gcsUri&quot;: &quot;A String&quot;, # Input only. Points to a Cloud Storage URI containing the consent artifact content. The URI must be in the following format: `gs://{bucket_id}/{object_id}`. The Cloud Healthcare API service account must have the `roles/storage.objectViewer` Cloud IAM role for this Cloud Storage location. The consent artifact content at this URI is copied to a Cloud Storage location managed by the Cloud Healthcare API. Responses to fetching requests return the consent artifact content in raw_bytes.
      &quot;rawBytes&quot;: &quot;A String&quot;, # Consent artifact content represented as a stream of bytes. This field is populated when returned in GetConsentArtifact response, but not included in CreateConsentArtifact and ListConsentArtifact response.
    },
    &quot;metadata&quot;: { # Optional. Metadata associated with the user&#x27;s signature. For example, the user&#x27;s name or the user&#x27;s title.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;signatureTime&quot;: &quot;A String&quot;, # Optional. Timestamp of the signature.
    &quot;userId&quot;: &quot;A String&quot;, # Required. User&#x27;s UUID provided by the client.
  },
  &quot;witnessSignature&quot;: { # User signature. # Optional. A signature from a witness.
    &quot;image&quot;: { # Raw bytes representing consent artifact content. # Optional. An image of the user&#x27;s signature.
      &quot;gcsUri&quot;: &quot;A String&quot;, # Input only. Points to a Cloud Storage URI containing the consent artifact content. The URI must be in the following format: `gs://{bucket_id}/{object_id}`. The Cloud Healthcare API service account must have the `roles/storage.objectViewer` Cloud IAM role for this Cloud Storage location. The consent artifact content at this URI is copied to a Cloud Storage location managed by the Cloud Healthcare API. Responses to fetching requests return the consent artifact content in raw_bytes.
      &quot;rawBytes&quot;: &quot;A String&quot;, # Consent artifact content represented as a stream of bytes. This field is populated when returned in GetConsentArtifact response, but not included in CreateConsentArtifact and ListConsentArtifact response.
    },
    &quot;metadata&quot;: { # Optional. Metadata associated with the user&#x27;s signature. For example, the user&#x27;s name or the user&#x27;s title.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;signatureTime&quot;: &quot;A String&quot;, # Optional. Timestamp of the signature.
    &quot;userId&quot;: &quot;A String&quot;, # Required. User&#x27;s UUID provided by the client.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes the specified Consent artifact. Fails if the artifact is referenced by the latest revision of any Consent.

Args:
  name: string, Required. The resource name of the Consent artifact to delete. To preserve referential integrity, Consent artifacts referenced by the latest revision of a Consent cannot be deleted. (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 the specified Consent artifact.

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

Returns:
  An object of the form:

    { # Documentation of a user&#x27;s consent.
  &quot;consentContentScreenshots&quot;: [ # Optional. Screenshots, PDFs, or other binary information documenting the user&#x27;s consent.
    { # Raw bytes representing consent artifact content.
      &quot;gcsUri&quot;: &quot;A String&quot;, # Input only. Points to a Cloud Storage URI containing the consent artifact content. The URI must be in the following format: `gs://{bucket_id}/{object_id}`. The Cloud Healthcare API service account must have the `roles/storage.objectViewer` Cloud IAM role for this Cloud Storage location. The consent artifact content at this URI is copied to a Cloud Storage location managed by the Cloud Healthcare API. Responses to fetching requests return the consent artifact content in raw_bytes.
      &quot;rawBytes&quot;: &quot;A String&quot;, # Consent artifact content represented as a stream of bytes. This field is populated when returned in GetConsentArtifact response, but not included in CreateConsentArtifact and ListConsentArtifact response.
    },
  ],
  &quot;consentContentVersion&quot;: &quot;A String&quot;, # Optional. An string indicating the version of the consent information shown to the user.
  &quot;guardianSignature&quot;: { # User signature. # Optional. A signature from a guardian.
    &quot;image&quot;: { # Raw bytes representing consent artifact content. # Optional. An image of the user&#x27;s signature.
      &quot;gcsUri&quot;: &quot;A String&quot;, # Input only. Points to a Cloud Storage URI containing the consent artifact content. The URI must be in the following format: `gs://{bucket_id}/{object_id}`. The Cloud Healthcare API service account must have the `roles/storage.objectViewer` Cloud IAM role for this Cloud Storage location. The consent artifact content at this URI is copied to a Cloud Storage location managed by the Cloud Healthcare API. Responses to fetching requests return the consent artifact content in raw_bytes.
      &quot;rawBytes&quot;: &quot;A String&quot;, # Consent artifact content represented as a stream of bytes. This field is populated when returned in GetConsentArtifact response, but not included in CreateConsentArtifact and ListConsentArtifact response.
    },
    &quot;metadata&quot;: { # Optional. Metadata associated with the user&#x27;s signature. For example, the user&#x27;s name or the user&#x27;s title.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;signatureTime&quot;: &quot;A String&quot;, # Optional. Timestamp of the signature.
    &quot;userId&quot;: &quot;A String&quot;, # Required. User&#x27;s UUID provided by the client.
  },
  &quot;metadata&quot;: { # Optional. Metadata associated with the Consent artifact. For example, the consent locale or user agent version.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
  &quot;name&quot;: &quot;A String&quot;, # Resource name of the Consent artifact, of the form `projects/{project_id}/locations/{location_id}/datasets/{dataset_id}/consentStores/{consent_store_id}/consentArtifacts/{consent_artifact_id}`. Cannot be changed after creation.
  &quot;userId&quot;: &quot;A String&quot;, # Required. User&#x27;s UUID provided by the client.
  &quot;userSignature&quot;: { # User signature. # Optional. User&#x27;s signature.
    &quot;image&quot;: { # Raw bytes representing consent artifact content. # Optional. An image of the user&#x27;s signature.
      &quot;gcsUri&quot;: &quot;A String&quot;, # Input only. Points to a Cloud Storage URI containing the consent artifact content. The URI must be in the following format: `gs://{bucket_id}/{object_id}`. The Cloud Healthcare API service account must have the `roles/storage.objectViewer` Cloud IAM role for this Cloud Storage location. The consent artifact content at this URI is copied to a Cloud Storage location managed by the Cloud Healthcare API. Responses to fetching requests return the consent artifact content in raw_bytes.
      &quot;rawBytes&quot;: &quot;A String&quot;, # Consent artifact content represented as a stream of bytes. This field is populated when returned in GetConsentArtifact response, but not included in CreateConsentArtifact and ListConsentArtifact response.
    },
    &quot;metadata&quot;: { # Optional. Metadata associated with the user&#x27;s signature. For example, the user&#x27;s name or the user&#x27;s title.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;signatureTime&quot;: &quot;A String&quot;, # Optional. Timestamp of the signature.
    &quot;userId&quot;: &quot;A String&quot;, # Required. User&#x27;s UUID provided by the client.
  },
  &quot;witnessSignature&quot;: { # User signature. # Optional. A signature from a witness.
    &quot;image&quot;: { # Raw bytes representing consent artifact content. # Optional. An image of the user&#x27;s signature.
      &quot;gcsUri&quot;: &quot;A String&quot;, # Input only. Points to a Cloud Storage URI containing the consent artifact content. The URI must be in the following format: `gs://{bucket_id}/{object_id}`. The Cloud Healthcare API service account must have the `roles/storage.objectViewer` Cloud IAM role for this Cloud Storage location. The consent artifact content at this URI is copied to a Cloud Storage location managed by the Cloud Healthcare API. Responses to fetching requests return the consent artifact content in raw_bytes.
      &quot;rawBytes&quot;: &quot;A String&quot;, # Consent artifact content represented as a stream of bytes. This field is populated when returned in GetConsentArtifact response, but not included in CreateConsentArtifact and ListConsentArtifact response.
    },
    &quot;metadata&quot;: { # Optional. Metadata associated with the user&#x27;s signature. For example, the user&#x27;s name or the user&#x27;s title.
      &quot;a_key&quot;: &quot;A String&quot;,
    },
    &quot;signatureTime&quot;: &quot;A String&quot;, # Optional. Timestamp of the signature.
    &quot;userId&quot;: &quot;A String&quot;, # Required. User&#x27;s UUID provided by the client.
  },
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists the Consent artifacts in the specified consent store.

Args:
  parent: string, Required. Name of the consent store to retrieve consent artifacts from. (required)
  filter: string, Optional. Restricts the artifacts returned to those matching a filter. The following syntax is available: * A string field value can be written as text inside quotation marks, for example `&quot;query text&quot;`. The only valid relational operation for text fields is equality (`=`), where text is searched within the field, rather than having the field be equal to the text. For example, `&quot;Comment = great&quot;` returns messages with `great` in the comment field. * A number field value can be written as an integer, a decimal, or an exponential. The valid relational operators for number fields are the equality operator (`=`), along with the less than/greater than operators (`&lt;`, `&lt;=`, `&gt;`, `&gt;=`). Note that there is no inequality (`!=`) operator. You can prepend the `NOT` operator to an expression to negate it. * A date field value must be written in `yyyy-mm-dd` form. Fields with date and time use the RFC3339 time format. Leading zeros are required for one-digit months and days. The valid relational operators for date fields are the equality operator (`=`) , along with the less than/greater than operators (`&lt;`, `&lt;=`, `&gt;`, `&gt;=`). Note that there is no inequality (`!=`) operator. You can prepend the `NOT` operator to an expression to negate it. * Multiple field query expressions can be combined in one query by adding `AND` or `OR` operators between the expressions. If a boolean operator appears within a quoted string, it is not treated as special, it&#x27;s just another part of the character string to be matched. You can prepend the `NOT` operator to an expression to negate it. The fields available for filtering are: - user_id. For example, `filter=user_id=\&quot;user123\&quot;`. - consent_content_version - metadata. For example, `filter=Metadata(\&quot;testkey\&quot;)=\&quot;value\&quot;` or `filter=HasMetadata(\&quot;testkey\&quot;)`.
  pageSize: integer, Optional. Limit on the number of consent artifacts to return in a single response. If not specified, 100 is used. May not be larger than 1000.
  pageToken: string, Optional. The next_page_token value returned from the previous List request, if any.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &quot;consentArtifacts&quot;: [ # The returned Consent artifacts. The maximum number of artifacts returned is determined by the value of page_size in the ListConsentArtifactsRequest.
    { # Documentation of a user&#x27;s consent.
      &quot;consentContentScreenshots&quot;: [ # Optional. Screenshots, PDFs, or other binary information documenting the user&#x27;s consent.
        { # Raw bytes representing consent artifact content.
          &quot;gcsUri&quot;: &quot;A String&quot;, # Input only. Points to a Cloud Storage URI containing the consent artifact content. The URI must be in the following format: `gs://{bucket_id}/{object_id}`. The Cloud Healthcare API service account must have the `roles/storage.objectViewer` Cloud IAM role for this Cloud Storage location. The consent artifact content at this URI is copied to a Cloud Storage location managed by the Cloud Healthcare API. Responses to fetching requests return the consent artifact content in raw_bytes.
          &quot;rawBytes&quot;: &quot;A String&quot;, # Consent artifact content represented as a stream of bytes. This field is populated when returned in GetConsentArtifact response, but not included in CreateConsentArtifact and ListConsentArtifact response.
        },
      ],
      &quot;consentContentVersion&quot;: &quot;A String&quot;, # Optional. An string indicating the version of the consent information shown to the user.
      &quot;guardianSignature&quot;: { # User signature. # Optional. A signature from a guardian.
        &quot;image&quot;: { # Raw bytes representing consent artifact content. # Optional. An image of the user&#x27;s signature.
          &quot;gcsUri&quot;: &quot;A String&quot;, # Input only. Points to a Cloud Storage URI containing the consent artifact content. The URI must be in the following format: `gs://{bucket_id}/{object_id}`. The Cloud Healthcare API service account must have the `roles/storage.objectViewer` Cloud IAM role for this Cloud Storage location. The consent artifact content at this URI is copied to a Cloud Storage location managed by the Cloud Healthcare API. Responses to fetching requests return the consent artifact content in raw_bytes.
          &quot;rawBytes&quot;: &quot;A String&quot;, # Consent artifact content represented as a stream of bytes. This field is populated when returned in GetConsentArtifact response, but not included in CreateConsentArtifact and ListConsentArtifact response.
        },
        &quot;metadata&quot;: { # Optional. Metadata associated with the user&#x27;s signature. For example, the user&#x27;s name or the user&#x27;s title.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;signatureTime&quot;: &quot;A String&quot;, # Optional. Timestamp of the signature.
        &quot;userId&quot;: &quot;A String&quot;, # Required. User&#x27;s UUID provided by the client.
      },
      &quot;metadata&quot;: { # Optional. Metadata associated with the Consent artifact. For example, the consent locale or user agent version.
        &quot;a_key&quot;: &quot;A String&quot;,
      },
      &quot;name&quot;: &quot;A String&quot;, # Resource name of the Consent artifact, of the form `projects/{project_id}/locations/{location_id}/datasets/{dataset_id}/consentStores/{consent_store_id}/consentArtifacts/{consent_artifact_id}`. Cannot be changed after creation.
      &quot;userId&quot;: &quot;A String&quot;, # Required. User&#x27;s UUID provided by the client.
      &quot;userSignature&quot;: { # User signature. # Optional. User&#x27;s signature.
        &quot;image&quot;: { # Raw bytes representing consent artifact content. # Optional. An image of the user&#x27;s signature.
          &quot;gcsUri&quot;: &quot;A String&quot;, # Input only. Points to a Cloud Storage URI containing the consent artifact content. The URI must be in the following format: `gs://{bucket_id}/{object_id}`. The Cloud Healthcare API service account must have the `roles/storage.objectViewer` Cloud IAM role for this Cloud Storage location. The consent artifact content at this URI is copied to a Cloud Storage location managed by the Cloud Healthcare API. Responses to fetching requests return the consent artifact content in raw_bytes.
          &quot;rawBytes&quot;: &quot;A String&quot;, # Consent artifact content represented as a stream of bytes. This field is populated when returned in GetConsentArtifact response, but not included in CreateConsentArtifact and ListConsentArtifact response.
        },
        &quot;metadata&quot;: { # Optional. Metadata associated with the user&#x27;s signature. For example, the user&#x27;s name or the user&#x27;s title.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;signatureTime&quot;: &quot;A String&quot;, # Optional. Timestamp of the signature.
        &quot;userId&quot;: &quot;A String&quot;, # Required. User&#x27;s UUID provided by the client.
      },
      &quot;witnessSignature&quot;: { # User signature. # Optional. A signature from a witness.
        &quot;image&quot;: { # Raw bytes representing consent artifact content. # Optional. An image of the user&#x27;s signature.
          &quot;gcsUri&quot;: &quot;A String&quot;, # Input only. Points to a Cloud Storage URI containing the consent artifact content. The URI must be in the following format: `gs://{bucket_id}/{object_id}`. The Cloud Healthcare API service account must have the `roles/storage.objectViewer` Cloud IAM role for this Cloud Storage location. The consent artifact content at this URI is copied to a Cloud Storage location managed by the Cloud Healthcare API. Responses to fetching requests return the consent artifact content in raw_bytes.
          &quot;rawBytes&quot;: &quot;A String&quot;, # Consent artifact content represented as a stream of bytes. This field is populated when returned in GetConsentArtifact response, but not included in CreateConsentArtifact and ListConsentArtifact response.
        },
        &quot;metadata&quot;: { # Optional. Metadata associated with the user&#x27;s signature. For example, the user&#x27;s name or the user&#x27;s title.
          &quot;a_key&quot;: &quot;A String&quot;,
        },
        &quot;signatureTime&quot;: &quot;A String&quot;, # Optional. Timestamp of the signature.
        &quot;userId&quot;: &quot;A String&quot;, # Required. User&#x27;s UUID provided by the client.
      },
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # Token to retrieve the next page of results, or empty if there are no more results in the list.
}</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>