<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="mybusinessplaceactions_v1.html">My Business Place Actions API</a> . <a href="mybusinessplaceactions_v1.locations.html">locations</a> . <a href="mybusinessplaceactions_v1.locations.placeActionLinks.html">placeActionLinks</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 place action link associated with the specified location, and returns it. The request is considered duplicate if the `parent`, `place_action_link.uri` and `place_action_link.place_action_type` are the same as a previous request.</p>
<p class="toc_element">
  <code><a href="#delete">delete(name, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a place action link from the specified location.</p>
<p class="toc_element">
  <code><a href="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets the specified place action link.</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 place action links for the specified location.</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 place action link and returns it.</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 place action link associated with the specified location, and returns it. The request is considered duplicate if the `parent`, `place_action_link.uri` and `place_action_link.place_action_type` are the same as a previous request.

Args:
  parent: string, Required. The resource name of the location where to create this place action link. `locations/{location_id}`. (required)
  body: object, The request body.
    The object takes the form of:

{ # Represents a place action link and its attributes.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time when the place action link was created.
  &quot;isEditable&quot;: True or False, # Output only. Indicates whether this link can be edited by the client.
  &quot;isPreferred&quot;: True or False, # Optional. Whether this link is preferred by the merchant. Only one link can be marked as preferred per place action type at a location. If a future request marks a different link as preferred for the same place action type, then the current preferred link (if any exists) will lose its preference.
  &quot;name&quot;: &quot;A String&quot;, # Optional. The resource name, in the format `locations/{location_id}/placeActionLinks/{place_action_link_id}`. The name field will only be considered in UpdatePlaceActionLink and DeletePlaceActionLink requests for updating and deleting links respectively. However, it will be ignored in CreatePlaceActionLink request, where `place_action_link_id` will be assigned by the server on successful creation of a new link and returned as part of the response.
  &quot;placeActionType&quot;: &quot;A String&quot;, # Required. The type of place action that can be performed using this link.
  &quot;providerType&quot;: &quot;A String&quot;, # Output only. Specifies the provider type.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time when the place action link was last modified.
  &quot;uri&quot;: &quot;A String&quot;, # Required. The link uri. The same uri can be reused for different action types across different locations. However, only one place action link is allowed for each unique combination of (uri, place action type, location).
}

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

Returns:
  An object of the form:

    { # Represents a place action link and its attributes.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time when the place action link was created.
  &quot;isEditable&quot;: True or False, # Output only. Indicates whether this link can be edited by the client.
  &quot;isPreferred&quot;: True or False, # Optional. Whether this link is preferred by the merchant. Only one link can be marked as preferred per place action type at a location. If a future request marks a different link as preferred for the same place action type, then the current preferred link (if any exists) will lose its preference.
  &quot;name&quot;: &quot;A String&quot;, # Optional. The resource name, in the format `locations/{location_id}/placeActionLinks/{place_action_link_id}`. The name field will only be considered in UpdatePlaceActionLink and DeletePlaceActionLink requests for updating and deleting links respectively. However, it will be ignored in CreatePlaceActionLink request, where `place_action_link_id` will be assigned by the server on successful creation of a new link and returned as part of the response.
  &quot;placeActionType&quot;: &quot;A String&quot;, # Required. The type of place action that can be performed using this link.
  &quot;providerType&quot;: &quot;A String&quot;, # Output only. Specifies the provider type.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time when the place action link was last modified.
  &quot;uri&quot;: &quot;A String&quot;, # Required. The link uri. The same uri can be reused for different action types across different locations. However, only one place action link is allowed for each unique combination of (uri, place action type, location).
}</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(name, x__xgafv=None)</code>
  <pre>Deletes a place action link from the specified location.

Args:
  name: string, Required. The resource name of the place action link to remove from the location. (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); }
}</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets the specified place action link.

Args:
  name: string, Required. The name of the place action link to fetch. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents a place action link and its attributes.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time when the place action link was created.
  &quot;isEditable&quot;: True or False, # Output only. Indicates whether this link can be edited by the client.
  &quot;isPreferred&quot;: True or False, # Optional. Whether this link is preferred by the merchant. Only one link can be marked as preferred per place action type at a location. If a future request marks a different link as preferred for the same place action type, then the current preferred link (if any exists) will lose its preference.
  &quot;name&quot;: &quot;A String&quot;, # Optional. The resource name, in the format `locations/{location_id}/placeActionLinks/{place_action_link_id}`. The name field will only be considered in UpdatePlaceActionLink and DeletePlaceActionLink requests for updating and deleting links respectively. However, it will be ignored in CreatePlaceActionLink request, where `place_action_link_id` will be assigned by the server on successful creation of a new link and returned as part of the response.
  &quot;placeActionType&quot;: &quot;A String&quot;, # Required. The type of place action that can be performed using this link.
  &quot;providerType&quot;: &quot;A String&quot;, # Output only. Specifies the provider type.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time when the place action link was last modified.
  &quot;uri&quot;: &quot;A String&quot;, # Required. The link uri. The same uri can be reused for different action types across different locations. However, only one place action link is allowed for each unique combination of (uri, place action type, location).
}</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 place action links for the specified location.

Args:
  parent: string, Required. The name of the location whose place action links will be listed. `locations/{location_id}`. (required)
  filter: string, Optional. A filter constraining the place action links to return. The response includes entries that match the filter. We support only the following filter: 1. place_action_type=XYZ where XYZ is a valid PlaceActionType.
  pageSize: integer, Optional. How many place action links to return per page. Default of 10. The minimum is 1.
  pageToken: string, Optional. If specified, returns the next page of place action links.
  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 PlaceActions.ListPlaceActionLinks.
  &quot;nextPageToken&quot;: &quot;A String&quot;, # If there are more place action links than the requested page size, then this field is populated with a token to fetch the next page of results.
  &quot;placeActionLinks&quot;: [ # The returned list of place action links.
    { # Represents a place action link and its attributes.
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time when the place action link was created.
      &quot;isEditable&quot;: True or False, # Output only. Indicates whether this link can be edited by the client.
      &quot;isPreferred&quot;: True or False, # Optional. Whether this link is preferred by the merchant. Only one link can be marked as preferred per place action type at a location. If a future request marks a different link as preferred for the same place action type, then the current preferred link (if any exists) will lose its preference.
      &quot;name&quot;: &quot;A String&quot;, # Optional. The resource name, in the format `locations/{location_id}/placeActionLinks/{place_action_link_id}`. The name field will only be considered in UpdatePlaceActionLink and DeletePlaceActionLink requests for updating and deleting links respectively. However, it will be ignored in CreatePlaceActionLink request, where `place_action_link_id` will be assigned by the server on successful creation of a new link and returned as part of the response.
      &quot;placeActionType&quot;: &quot;A String&quot;, # Required. The type of place action that can be performed using this link.
      &quot;providerType&quot;: &quot;A String&quot;, # Output only. Specifies the provider type.
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time when the place action link was last modified.
      &quot;uri&quot;: &quot;A String&quot;, # Required. The link uri. The same uri can be reused for different action types across different locations. However, only one place action link is allowed for each unique combination of (uri, place action type, location).
    },
  ],
}</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 place action link and returns it.

Args:
  name: string, Optional. The resource name, in the format `locations/{location_id}/placeActionLinks/{place_action_link_id}`. The name field will only be considered in UpdatePlaceActionLink and DeletePlaceActionLink requests for updating and deleting links respectively. However, it will be ignored in CreatePlaceActionLink request, where `place_action_link_id` will be assigned by the server on successful creation of a new link and returned as part of the response. (required)
  body: object, The request body.
    The object takes the form of:

{ # Represents a place action link and its attributes.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time when the place action link was created.
  &quot;isEditable&quot;: True or False, # Output only. Indicates whether this link can be edited by the client.
  &quot;isPreferred&quot;: True or False, # Optional. Whether this link is preferred by the merchant. Only one link can be marked as preferred per place action type at a location. If a future request marks a different link as preferred for the same place action type, then the current preferred link (if any exists) will lose its preference.
  &quot;name&quot;: &quot;A String&quot;, # Optional. The resource name, in the format `locations/{location_id}/placeActionLinks/{place_action_link_id}`. The name field will only be considered in UpdatePlaceActionLink and DeletePlaceActionLink requests for updating and deleting links respectively. However, it will be ignored in CreatePlaceActionLink request, where `place_action_link_id` will be assigned by the server on successful creation of a new link and returned as part of the response.
  &quot;placeActionType&quot;: &quot;A String&quot;, # Required. The type of place action that can be performed using this link.
  &quot;providerType&quot;: &quot;A String&quot;, # Output only. Specifies the provider type.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time when the place action link was last modified.
  &quot;uri&quot;: &quot;A String&quot;, # Required. The link uri. The same uri can be reused for different action types across different locations. However, only one place action link is allowed for each unique combination of (uri, place action type, location).
}

  updateMask: string, Required. The specific fields to update. The only editable fields are `uri`, `place_action_type` and `is_preferred`. If the updated link already exists at the same location with the same `place_action_type` and `uri`, fails with an `ALREADY_EXISTS` error.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents a place action link and its attributes.
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The time when the place action link was created.
  &quot;isEditable&quot;: True or False, # Output only. Indicates whether this link can be edited by the client.
  &quot;isPreferred&quot;: True or False, # Optional. Whether this link is preferred by the merchant. Only one link can be marked as preferred per place action type at a location. If a future request marks a different link as preferred for the same place action type, then the current preferred link (if any exists) will lose its preference.
  &quot;name&quot;: &quot;A String&quot;, # Optional. The resource name, in the format `locations/{location_id}/placeActionLinks/{place_action_link_id}`. The name field will only be considered in UpdatePlaceActionLink and DeletePlaceActionLink requests for updating and deleting links respectively. However, it will be ignored in CreatePlaceActionLink request, where `place_action_link_id` will be assigned by the server on successful creation of a new link and returned as part of the response.
  &quot;placeActionType&quot;: &quot;A String&quot;, # Required. The type of place action that can be performed using this link.
  &quot;providerType&quot;: &quot;A String&quot;, # Output only. Specifies the provider type.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The time when the place action link was last modified.
  &quot;uri&quot;: &quot;A String&quot;, # Required. The link uri. The same uri can be reused for different action types across different locations. However, only one place action link is allowed for each unique combination of (uri, place action type, location).
}</pre>
</div>

</body></html>