<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_v1beta1.html">Cloud Healthcare API</a> . <a href="healthcare_v1beta1.projects.html">projects</a> . <a href="healthcare_v1beta1.projects.locations.html">locations</a> . <a href="healthcare_v1beta1.projects.locations.datasets.html">datasets</a> . <a href="healthcare_v1beta1.projects.locations.datasets.consentStores.html">consentStores</a> . <a href="healthcare_v1beta1.projects.locations.datasets.consentStores.userDataMappings.html">userDataMappings</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#archive">archive(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Archives the specified User data mapping.</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(parent, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new User data mapping 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 User data mapping.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the specified User data mapping.</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 User data mappings 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>
<p class="toc_element">
  <code><a href="#patch">patch(name, body=None, updateMask=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates the specified User data mapping.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="archive">archive(name, body=None, x__xgafv=None)</code>
  <pre>Archives the specified User data mapping.

Args:
  name: string, Required. The resource name of the User data mapping to archive. (required)
  body: object, The request body.
    The object takes the form of:

{ # Archives the specified User data mapping.
}

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

Returns:
  An object of the form:

    { # Archives the specified User data mapping.
}</pre>
</div>

<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 User data mapping in the parent consent store.

Args:
  parent: string, Required. Name of the consent store. (required)
  body: object, The request body.
    The object takes the form of:

{ # Maps a resource to the associated user and Attributes.
  &quot;archiveTime&quot;: &quot;A String&quot;, # Output only. Indicates the time when this mapping was archived.
  &quot;archived&quot;: True or False, # Output only. Indicates whether this mapping is archived.
  &quot;dataId&quot;: &quot;A String&quot;, # Required. A unique identifier for the mapped resource.
  &quot;name&quot;: &quot;A String&quot;, # Resource name of the User data mapping, of the form `projects/{project_id}/locations/{location_id}/datasets/{dataset_id}/consentStores/{consent_store_id}/userDataMappings/{user_data_mapping_id}`.
  &quot;resourceAttributes&quot;: [ # Attributes of the resource. Only explicitly set attributes are displayed here. Attribute definitions with defaults set implicitly apply to these User data mappings. Attributes listed here must be single valued, that is, exactly one value is specified for the field &quot;values&quot; in each Attribute.
    { # An attribute value for a Consent or User data mapping. Each Attribute must have a corresponding AttributeDefinition in the consent store that defines the default and allowed values.
      &quot;attributeDefinitionId&quot;: &quot;A String&quot;, # Indicates the name of an attribute defined in the consent store.
      &quot;values&quot;: [ # The value of the attribute. Must be an acceptable value as defined in the consent store. For example, if the consent store defines &quot;data type&quot; with acceptable values &quot;questionnaire&quot; and &quot;step-count&quot;, when the attribute name is data type, this field must contain one of those values.
        &quot;A String&quot;,
      ],
    },
  ],
  &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:

    { # Maps a resource to the associated user and Attributes.
  &quot;archiveTime&quot;: &quot;A String&quot;, # Output only. Indicates the time when this mapping was archived.
  &quot;archived&quot;: True or False, # Output only. Indicates whether this mapping is archived.
  &quot;dataId&quot;: &quot;A String&quot;, # Required. A unique identifier for the mapped resource.
  &quot;name&quot;: &quot;A String&quot;, # Resource name of the User data mapping, of the form `projects/{project_id}/locations/{location_id}/datasets/{dataset_id}/consentStores/{consent_store_id}/userDataMappings/{user_data_mapping_id}`.
  &quot;resourceAttributes&quot;: [ # Attributes of the resource. Only explicitly set attributes are displayed here. Attribute definitions with defaults set implicitly apply to these User data mappings. Attributes listed here must be single valued, that is, exactly one value is specified for the field &quot;values&quot; in each Attribute.
    { # An attribute value for a Consent or User data mapping. Each Attribute must have a corresponding AttributeDefinition in the consent store that defines the default and allowed values.
      &quot;attributeDefinitionId&quot;: &quot;A String&quot;, # Indicates the name of an attribute defined in the consent store.
      &quot;values&quot;: [ # The value of the attribute. Must be an acceptable value as defined in the consent store. For example, if the consent store defines &quot;data type&quot; with acceptable values &quot;questionnaire&quot; and &quot;step-count&quot;, when the attribute name is data type, this field must contain one of those values.
        &quot;A String&quot;,
      ],
    },
  ],
  &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 User data mapping.

Args:
  name: string, Required. The resource name of the User data mapping 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); } 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 User data mapping.

Args:
  name: string, Required. The resource name of the User data mapping 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:

    { # Maps a resource to the associated user and Attributes.
  &quot;archiveTime&quot;: &quot;A String&quot;, # Output only. Indicates the time when this mapping was archived.
  &quot;archived&quot;: True or False, # Output only. Indicates whether this mapping is archived.
  &quot;dataId&quot;: &quot;A String&quot;, # Required. A unique identifier for the mapped resource.
  &quot;name&quot;: &quot;A String&quot;, # Resource name of the User data mapping, of the form `projects/{project_id}/locations/{location_id}/datasets/{dataset_id}/consentStores/{consent_store_id}/userDataMappings/{user_data_mapping_id}`.
  &quot;resourceAttributes&quot;: [ # Attributes of the resource. Only explicitly set attributes are displayed here. Attribute definitions with defaults set implicitly apply to these User data mappings. Attributes listed here must be single valued, that is, exactly one value is specified for the field &quot;values&quot; in each Attribute.
    { # An attribute value for a Consent or User data mapping. Each Attribute must have a corresponding AttributeDefinition in the consent store that defines the default and allowed values.
      &quot;attributeDefinitionId&quot;: &quot;A String&quot;, # Indicates the name of an attribute defined in the consent store.
      &quot;values&quot;: [ # The value of the attribute. Must be an acceptable value as defined in the consent store. For example, if the consent store defines &quot;data type&quot; with acceptable values &quot;questionnaire&quot; and &quot;step-count&quot;, when the attribute name is data type, this field must contain one of those values.
        &quot;A String&quot;,
      ],
    },
  ],
  &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 User data mappings in the specified consent store.

Args:
  parent: string, Required. Name of the consent store to retrieve User data mappings from. (required)
  filter: string, Optional. Restricts the user data mappings 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: - data_id - user_id. For example, `filter=user_id=\&quot;user123\&quot;`. - archived - archive_time
  pageSize: integer, Optional. Limit on the number of User data mappings to return in a single response. If not specified, 100 is used. May not be larger than 1000.
  pageToken: string, Optional. Token to retrieve the next page of results, or empty to get the first page.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    {
  &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.
  &quot;userDataMappings&quot;: [ # The returned User data mappings. The maximum number of User data mappings returned is determined by the value of page_size in the ListUserDataMappingsRequest.
    { # Maps a resource to the associated user and Attributes.
      &quot;archiveTime&quot;: &quot;A String&quot;, # Output only. Indicates the time when this mapping was archived.
      &quot;archived&quot;: True or False, # Output only. Indicates whether this mapping is archived.
      &quot;dataId&quot;: &quot;A String&quot;, # Required. A unique identifier for the mapped resource.
      &quot;name&quot;: &quot;A String&quot;, # Resource name of the User data mapping, of the form `projects/{project_id}/locations/{location_id}/datasets/{dataset_id}/consentStores/{consent_store_id}/userDataMappings/{user_data_mapping_id}`.
      &quot;resourceAttributes&quot;: [ # Attributes of the resource. Only explicitly set attributes are displayed here. Attribute definitions with defaults set implicitly apply to these User data mappings. Attributes listed here must be single valued, that is, exactly one value is specified for the field &quot;values&quot; in each Attribute.
        { # An attribute value for a Consent or User data mapping. Each Attribute must have a corresponding AttributeDefinition in the consent store that defines the default and allowed values.
          &quot;attributeDefinitionId&quot;: &quot;A String&quot;, # Indicates the name of an attribute defined in the consent store.
          &quot;values&quot;: [ # The value of the attribute. Must be an acceptable value as defined in the consent store. For example, if the consent store defines &quot;data type&quot; with acceptable values &quot;questionnaire&quot; and &quot;step-count&quot;, when the attribute name is data type, this field must contain one of those values.
            &quot;A String&quot;,
          ],
        },
      ],
      &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_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>

<div class="method">
    <code class="details" id="patch">patch(name, body=None, updateMask=None, x__xgafv=None)</code>
  <pre>Updates the specified User data mapping.

Args:
  name: string, Resource name of the User data mapping, of the form `projects/{project_id}/locations/{location_id}/datasets/{dataset_id}/consentStores/{consent_store_id}/userDataMappings/{user_data_mapping_id}`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Maps a resource to the associated user and Attributes.
  &quot;archiveTime&quot;: &quot;A String&quot;, # Output only. Indicates the time when this mapping was archived.
  &quot;archived&quot;: True or False, # Output only. Indicates whether this mapping is archived.
  &quot;dataId&quot;: &quot;A String&quot;, # Required. A unique identifier for the mapped resource.
  &quot;name&quot;: &quot;A String&quot;, # Resource name of the User data mapping, of the form `projects/{project_id}/locations/{location_id}/datasets/{dataset_id}/consentStores/{consent_store_id}/userDataMappings/{user_data_mapping_id}`.
  &quot;resourceAttributes&quot;: [ # Attributes of the resource. Only explicitly set attributes are displayed here. Attribute definitions with defaults set implicitly apply to these User data mappings. Attributes listed here must be single valued, that is, exactly one value is specified for the field &quot;values&quot; in each Attribute.
    { # An attribute value for a Consent or User data mapping. Each Attribute must have a corresponding AttributeDefinition in the consent store that defines the default and allowed values.
      &quot;attributeDefinitionId&quot;: &quot;A String&quot;, # Indicates the name of an attribute defined in the consent store.
      &quot;values&quot;: [ # The value of the attribute. Must be an acceptable value as defined in the consent store. For example, if the consent store defines &quot;data type&quot; with acceptable values &quot;questionnaire&quot; and &quot;step-count&quot;, when the attribute name is data type, this field must contain one of those values.
        &quot;A String&quot;,
      ],
    },
  ],
  &quot;userId&quot;: &quot;A String&quot;, # Required. User&#x27;s UUID provided by the client.
}

  updateMask: string, Required. The update mask that applies to the resource. For the `FieldMask` definition, see https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask. Only the `data_id`, `user_id` and `resource_attributes` fields can be updated.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Maps a resource to the associated user and Attributes.
  &quot;archiveTime&quot;: &quot;A String&quot;, # Output only. Indicates the time when this mapping was archived.
  &quot;archived&quot;: True or False, # Output only. Indicates whether this mapping is archived.
  &quot;dataId&quot;: &quot;A String&quot;, # Required. A unique identifier for the mapped resource.
  &quot;name&quot;: &quot;A String&quot;, # Resource name of the User data mapping, of the form `projects/{project_id}/locations/{location_id}/datasets/{dataset_id}/consentStores/{consent_store_id}/userDataMappings/{user_data_mapping_id}`.
  &quot;resourceAttributes&quot;: [ # Attributes of the resource. Only explicitly set attributes are displayed here. Attribute definitions with defaults set implicitly apply to these User data mappings. Attributes listed here must be single valued, that is, exactly one value is specified for the field &quot;values&quot; in each Attribute.
    { # An attribute value for a Consent or User data mapping. Each Attribute must have a corresponding AttributeDefinition in the consent store that defines the default and allowed values.
      &quot;attributeDefinitionId&quot;: &quot;A String&quot;, # Indicates the name of an attribute defined in the consent store.
      &quot;values&quot;: [ # The value of the attribute. Must be an acceptable value as defined in the consent store. For example, if the consent store defines &quot;data type&quot; with acceptable values &quot;questionnaire&quot; and &quot;step-count&quot;, when the attribute name is data type, this field must contain one of those values.
        &quot;A String&quot;,
      ],
    },
  ],
  &quot;userId&quot;: &quot;A String&quot;, # Required. User&#x27;s UUID provided by the client.
}</pre>
</div>

</body></html>