<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="cloudcommerceprocurement_v1.html">Cloud Commerce Partner Procurement API</a> . <a href="cloudcommerceprocurement_v1.providers.html">providers</a> . <a href="cloudcommerceprocurement_v1.providers.entitlements.html">entitlements</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#approve">approve(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Approves an entitlement that is in the EntitlementState.ENTITLEMENT_ACTIVATION_REQUESTED state. This method is invoked by the provider to approve the creation of the entitlement resource.</p>
<p class="toc_element">
  <code><a href="#approvePlanChange">approvePlanChange(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Approves an entitlement plan change that is in the EntitlementState.ENTITLEMENT_PENDING_PLAN_CHANGE_APPROVAL state. This method is invoked by the provider to approve the plan change on the entitlement 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="#get">get(name, x__xgafv=None)</a></code></p>
<p class="firstline">Gets a requested Entitlement resource.</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 Entitlements for which the provider has read access.</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 an existing Entitlement.</p>
<p class="toc_element">
  <code><a href="#reject">reject(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Rejects an entitlement that is in the EntitlementState.ENTITLEMENT_ACTIVATION_REQUESTED state. This method is invoked by the provider to reject the creation of the entitlement resource.</p>
<p class="toc_element">
  <code><a href="#rejectPlanChange">rejectPlanChange(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Rejects an entitlement plan change that is in the EntitlementState.ENTITLEMENT_PENDING_PLAN_CHANGE_APPROVAL state. This method is invoked by the provider to reject the plan change on the entitlement resource.</p>
<p class="toc_element">
  <code><a href="#suspend">suspend(name, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Requests suspension of an active Entitlement. This is not yet supported.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="approve">approve(name, body=None, x__xgafv=None)</code>
  <pre>Approves an entitlement that is in the EntitlementState.ENTITLEMENT_ACTIVATION_REQUESTED state. This method is invoked by the provider to approve the creation of the entitlement resource.

Args:
  name: string, The resource name of the entitlement. Required. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for [PartnerProcurementService.ApproveEntitlement[].
  &quot;properties&quot;: { # Set of properties that should be associated with the entitlement. Optional.
    &quot;a_key&quot;: &quot;A String&quot;,
  },
}

  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="approvePlanChange">approvePlanChange(name, body=None, x__xgafv=None)</code>
  <pre>Approves an entitlement plan change that is in the EntitlementState.ENTITLEMENT_PENDING_PLAN_CHANGE_APPROVAL state. This method is invoked by the provider to approve the plan change on the entitlement resource.

Args:
  name: string, The resource name of the entitlement. Required. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for [PartnerProcurementService.ApproveEntitlementPlanChange[].
  &quot;pendingPlanName&quot;: &quot;A String&quot;, # Name of the pending plan that is being approved. 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="close">close()</code>
  <pre>Close httplib2 connections.</pre>
</div>

<div class="method">
    <code class="details" id="get">get(name, x__xgafv=None)</code>
  <pre>Gets a requested Entitlement resource.

Args:
  name: string, The name of the entitlement 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:

    { # Represents a procured product of a customer. Next Id: 23
  &quot;account&quot;: &quot;A String&quot;, # Output only. The resource name of the account that this entitlement is based on, if any.
  &quot;consumers&quot;: [ # Output only. The resources using this entitlement, if applicable.
    { # A resource using (consuming) this entitlement.
      &quot;project&quot;: &quot;A String&quot;, # A project name with format `projects/`.
    },
  ],
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The creation timestamp.
  &quot;inputProperties&quot;: { # Output only. The custom properties that were collected from the user to create this entitlement.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
  },
  &quot;messageToUser&quot;: &quot;A String&quot;, # Provider-supplied message that is displayed to the end user. Currently this is used to communicate progress and ETA for provisioning. This field can be updated only when a user is waiting for an action from the provider, i.e. entitlement state is EntitlementState.ENTITLEMENT_ACTIVATION_REQUESTED or EntitlementState.ENTITLEMENT_PENDING_PLAN_CHANGE_APPROVAL. This field is cleared automatically when the entitlement state changes.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the entitlement. Entitlement names have the form `providers/{provider_id}/entitlements/{entitlement_id}`.
  &quot;newPendingOffer&quot;: &quot;A String&quot;, # Output only. The name of the offer the entitlement is switching to upon a pending plan change. Only exists if the pending plan change is moving to an offer. Format: &#x27;projects/{project}/services/{service}/privateOffers/{offer-id}&#x27; OR &#x27;projects/{project}/services/{service}/standardOffers/{offer-id}&#x27;, depending on whether the offer is private or public.
  &quot;newPendingPlan&quot;: &quot;A String&quot;, # Output only. The identifier of the pending new plan. Required if the product has plans and the entitlement has a pending plan change.
  &quot;offer&quot;: &quot;A String&quot;, # Output only. The name of the offer that was procured. Field is empty if order was not made using an offer. Format: &#x27;projects/{project}/services/{service}/privateOffers/{offer-id}&#x27; OR &#x27;projects/{project}/services/{service}/standardOffers/{offer-id}&#x27;, depending on whether the offer is private or public.
  &quot;offerEndTime&quot;: &quot;A String&quot;, # Output only. End time for the Offer association corresponding to this entitlement. The field is only populated if the entitlement is currently associated with an Offer.
  &quot;plan&quot;: &quot;A String&quot;, # Output only. The identifier of the plan that was procured. Required if the product has plans.
  &quot;product&quot;: &quot;A String&quot;, # Output only. The identifier of the entity that was purchased. This may actually represent a product, quote, or offer.
  &quot;productExternalName&quot;: &quot;A String&quot;, # Output only. The identifier of the product that was procured.
  &quot;provider&quot;: &quot;A String&quot;, # Output only. The identifier of the service provider that this entitlement was created against. Each service provider is assigned a unique provider value when they onboard with Cloud Commerce platform.
  &quot;quoteExternalName&quot;: &quot;A String&quot;, # Output only. The identifier of the quote that was used to procure. Empty if the order is not purchased using a quote.
  &quot;state&quot;: &quot;A String&quot;, # Output only. The state of the entitlement.
  &quot;subscriptionEndTime&quot;: &quot;A String&quot;, # Output only. End time for the subscription corresponding to this entitlement.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp.
  &quot;usageReportingId&quot;: &quot;A String&quot;, # Output only. The consumerId to use when reporting usage through the Service Control API. See the consumerId field at [Reporting Metrics](https://cloud.google.com/service-control/reporting-metrics) for more details. This field is present only if the product has usage-based billing configured.
}</pre>
</div>

<div class="method">
    <code class="details" id="list">list(parent, filter=None, pageSize=None, pageToken=None, x__xgafv=None)</code>
  <pre>Lists Entitlements for which the provider has read access.

Args:
  parent: string, The parent resource name. (required)
  filter: string, The filter that can be used to limit the list request. The filter is a query string that can match a selected set of attributes with string values. For example `account=E-1234-5678-ABCD-EFGH`, `state=pending_cancellation`, and `plan!=foo-plan`. Supported query attributes are * `account` * `customer_billing_account` with value in the format of: `billingAccounts/{id}` * `product_external_name` * `quote_external_name` * `offer` * `new_pending_offer` * `plan` * `newPendingPlan` or `new_pending_plan` * `state` * `consumers.project` Note that the consumers match works on repeated structures, so equality (`consumers.project=projects/123456789`) is not supported. Set membership can be expressed with the `:` operator. For example, `consumers.project:projects/123456789` finds entitlements with at least one consumer with project field equal to `projects/123456789`. Also note that the state name match is case-insensitive and query can omit the prefix &quot;ENTITLEMENT_&quot;. For example, `state=active` is equivalent to `state=ENTITLEMENT_ACTIVE`. If the query contains some special characters other than letters, underscore, or digits, the phrase must be quoted with double quotes. For example, `product=&quot;providerId:productId&quot;`, where the product name needs to be quoted because it contains special character colon. Queries can be combined with `AND`, `OR`, and `NOT` to form more complex queries. They can also be grouped to force a desired evaluation order. For example, `state=active AND (account=E-1234 OR account=5678) AND NOT (product=foo-product)`. Connective `AND` can be omitted between two predicates. For example `account=E-1234 state=active` is equivalent to `account=E-1234 AND state=active`.
  pageSize: integer, The maximum number of entries that are requested.
  pageToken: string, The token for fetching the next page.
  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 PartnerProcurementService.ListEntitlements.
  &quot;entitlements&quot;: [ # The list of entitlements in this response.
    { # Represents a procured product of a customer. Next Id: 23
      &quot;account&quot;: &quot;A String&quot;, # Output only. The resource name of the account that this entitlement is based on, if any.
      &quot;consumers&quot;: [ # Output only. The resources using this entitlement, if applicable.
        { # A resource using (consuming) this entitlement.
          &quot;project&quot;: &quot;A String&quot;, # A project name with format `projects/`.
        },
      ],
      &quot;createTime&quot;: &quot;A String&quot;, # Output only. The creation timestamp.
      &quot;inputProperties&quot;: { # Output only. The custom properties that were collected from the user to create this entitlement.
        &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
      },
      &quot;messageToUser&quot;: &quot;A String&quot;, # Provider-supplied message that is displayed to the end user. Currently this is used to communicate progress and ETA for provisioning. This field can be updated only when a user is waiting for an action from the provider, i.e. entitlement state is EntitlementState.ENTITLEMENT_ACTIVATION_REQUESTED or EntitlementState.ENTITLEMENT_PENDING_PLAN_CHANGE_APPROVAL. This field is cleared automatically when the entitlement state changes.
      &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the entitlement. Entitlement names have the form `providers/{provider_id}/entitlements/{entitlement_id}`.
      &quot;newPendingOffer&quot;: &quot;A String&quot;, # Output only. The name of the offer the entitlement is switching to upon a pending plan change. Only exists if the pending plan change is moving to an offer. Format: &#x27;projects/{project}/services/{service}/privateOffers/{offer-id}&#x27; OR &#x27;projects/{project}/services/{service}/standardOffers/{offer-id}&#x27;, depending on whether the offer is private or public.
      &quot;newPendingPlan&quot;: &quot;A String&quot;, # Output only. The identifier of the pending new plan. Required if the product has plans and the entitlement has a pending plan change.
      &quot;offer&quot;: &quot;A String&quot;, # Output only. The name of the offer that was procured. Field is empty if order was not made using an offer. Format: &#x27;projects/{project}/services/{service}/privateOffers/{offer-id}&#x27; OR &#x27;projects/{project}/services/{service}/standardOffers/{offer-id}&#x27;, depending on whether the offer is private or public.
      &quot;offerEndTime&quot;: &quot;A String&quot;, # Output only. End time for the Offer association corresponding to this entitlement. The field is only populated if the entitlement is currently associated with an Offer.
      &quot;plan&quot;: &quot;A String&quot;, # Output only. The identifier of the plan that was procured. Required if the product has plans.
      &quot;product&quot;: &quot;A String&quot;, # Output only. The identifier of the entity that was purchased. This may actually represent a product, quote, or offer.
      &quot;productExternalName&quot;: &quot;A String&quot;, # Output only. The identifier of the product that was procured.
      &quot;provider&quot;: &quot;A String&quot;, # Output only. The identifier of the service provider that this entitlement was created against. Each service provider is assigned a unique provider value when they onboard with Cloud Commerce platform.
      &quot;quoteExternalName&quot;: &quot;A String&quot;, # Output only. The identifier of the quote that was used to procure. Empty if the order is not purchased using a quote.
      &quot;state&quot;: &quot;A String&quot;, # Output only. The state of the entitlement.
      &quot;subscriptionEndTime&quot;: &quot;A String&quot;, # Output only. End time for the subscription corresponding to this entitlement.
      &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp.
      &quot;usageReportingId&quot;: &quot;A String&quot;, # Output only. The consumerId to use when reporting usage through the Service Control API. See the consumerId field at [Reporting Metrics](https://cloud.google.com/service-control/reporting-metrics) for more details. This field is present only if the product has usage-based billing configured.
    },
  ],
  &quot;nextPageToken&quot;: &quot;A String&quot;, # The token for fetching the next page.
}</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 an existing Entitlement.

Args:
  name: string, The name of the entitlement to update. (required)
  body: object, The request body.
    The object takes the form of:

{ # Represents a procured product of a customer. Next Id: 23
  &quot;account&quot;: &quot;A String&quot;, # Output only. The resource name of the account that this entitlement is based on, if any.
  &quot;consumers&quot;: [ # Output only. The resources using this entitlement, if applicable.
    { # A resource using (consuming) this entitlement.
      &quot;project&quot;: &quot;A String&quot;, # A project name with format `projects/`.
    },
  ],
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The creation timestamp.
  &quot;inputProperties&quot;: { # Output only. The custom properties that were collected from the user to create this entitlement.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
  },
  &quot;messageToUser&quot;: &quot;A String&quot;, # Provider-supplied message that is displayed to the end user. Currently this is used to communicate progress and ETA for provisioning. This field can be updated only when a user is waiting for an action from the provider, i.e. entitlement state is EntitlementState.ENTITLEMENT_ACTIVATION_REQUESTED or EntitlementState.ENTITLEMENT_PENDING_PLAN_CHANGE_APPROVAL. This field is cleared automatically when the entitlement state changes.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the entitlement. Entitlement names have the form `providers/{provider_id}/entitlements/{entitlement_id}`.
  &quot;newPendingOffer&quot;: &quot;A String&quot;, # Output only. The name of the offer the entitlement is switching to upon a pending plan change. Only exists if the pending plan change is moving to an offer. Format: &#x27;projects/{project}/services/{service}/privateOffers/{offer-id}&#x27; OR &#x27;projects/{project}/services/{service}/standardOffers/{offer-id}&#x27;, depending on whether the offer is private or public.
  &quot;newPendingPlan&quot;: &quot;A String&quot;, # Output only. The identifier of the pending new plan. Required if the product has plans and the entitlement has a pending plan change.
  &quot;offer&quot;: &quot;A String&quot;, # Output only. The name of the offer that was procured. Field is empty if order was not made using an offer. Format: &#x27;projects/{project}/services/{service}/privateOffers/{offer-id}&#x27; OR &#x27;projects/{project}/services/{service}/standardOffers/{offer-id}&#x27;, depending on whether the offer is private or public.
  &quot;offerEndTime&quot;: &quot;A String&quot;, # Output only. End time for the Offer association corresponding to this entitlement. The field is only populated if the entitlement is currently associated with an Offer.
  &quot;plan&quot;: &quot;A String&quot;, # Output only. The identifier of the plan that was procured. Required if the product has plans.
  &quot;product&quot;: &quot;A String&quot;, # Output only. The identifier of the entity that was purchased. This may actually represent a product, quote, or offer.
  &quot;productExternalName&quot;: &quot;A String&quot;, # Output only. The identifier of the product that was procured.
  &quot;provider&quot;: &quot;A String&quot;, # Output only. The identifier of the service provider that this entitlement was created against. Each service provider is assigned a unique provider value when they onboard with Cloud Commerce platform.
  &quot;quoteExternalName&quot;: &quot;A String&quot;, # Output only. The identifier of the quote that was used to procure. Empty if the order is not purchased using a quote.
  &quot;state&quot;: &quot;A String&quot;, # Output only. The state of the entitlement.
  &quot;subscriptionEndTime&quot;: &quot;A String&quot;, # Output only. End time for the subscription corresponding to this entitlement.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp.
  &quot;usageReportingId&quot;: &quot;A String&quot;, # Output only. The consumerId to use when reporting usage through the Service Control API. See the consumerId field at [Reporting Metrics](https://cloud.google.com/service-control/reporting-metrics) for more details. This field is present only if the product has usage-based billing configured.
}

  updateMask: string, The update mask that applies to the resource. See the [FieldMask definition] (https://developers.google.com/protocol-buffers/docs/reference/google.protobuf#fieldmask) for more details.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # Represents a procured product of a customer. Next Id: 23
  &quot;account&quot;: &quot;A String&quot;, # Output only. The resource name of the account that this entitlement is based on, if any.
  &quot;consumers&quot;: [ # Output only. The resources using this entitlement, if applicable.
    { # A resource using (consuming) this entitlement.
      &quot;project&quot;: &quot;A String&quot;, # A project name with format `projects/`.
    },
  ],
  &quot;createTime&quot;: &quot;A String&quot;, # Output only. The creation timestamp.
  &quot;inputProperties&quot;: { # Output only. The custom properties that were collected from the user to create this entitlement.
    &quot;a_key&quot;: &quot;&quot;, # Properties of the object.
  },
  &quot;messageToUser&quot;: &quot;A String&quot;, # Provider-supplied message that is displayed to the end user. Currently this is used to communicate progress and ETA for provisioning. This field can be updated only when a user is waiting for an action from the provider, i.e. entitlement state is EntitlementState.ENTITLEMENT_ACTIVATION_REQUESTED or EntitlementState.ENTITLEMENT_PENDING_PLAN_CHANGE_APPROVAL. This field is cleared automatically when the entitlement state changes.
  &quot;name&quot;: &quot;A String&quot;, # Output only. The resource name of the entitlement. Entitlement names have the form `providers/{provider_id}/entitlements/{entitlement_id}`.
  &quot;newPendingOffer&quot;: &quot;A String&quot;, # Output only. The name of the offer the entitlement is switching to upon a pending plan change. Only exists if the pending plan change is moving to an offer. Format: &#x27;projects/{project}/services/{service}/privateOffers/{offer-id}&#x27; OR &#x27;projects/{project}/services/{service}/standardOffers/{offer-id}&#x27;, depending on whether the offer is private or public.
  &quot;newPendingPlan&quot;: &quot;A String&quot;, # Output only. The identifier of the pending new plan. Required if the product has plans and the entitlement has a pending plan change.
  &quot;offer&quot;: &quot;A String&quot;, # Output only. The name of the offer that was procured. Field is empty if order was not made using an offer. Format: &#x27;projects/{project}/services/{service}/privateOffers/{offer-id}&#x27; OR &#x27;projects/{project}/services/{service}/standardOffers/{offer-id}&#x27;, depending on whether the offer is private or public.
  &quot;offerEndTime&quot;: &quot;A String&quot;, # Output only. End time for the Offer association corresponding to this entitlement. The field is only populated if the entitlement is currently associated with an Offer.
  &quot;plan&quot;: &quot;A String&quot;, # Output only. The identifier of the plan that was procured. Required if the product has plans.
  &quot;product&quot;: &quot;A String&quot;, # Output only. The identifier of the entity that was purchased. This may actually represent a product, quote, or offer.
  &quot;productExternalName&quot;: &quot;A String&quot;, # Output only. The identifier of the product that was procured.
  &quot;provider&quot;: &quot;A String&quot;, # Output only. The identifier of the service provider that this entitlement was created against. Each service provider is assigned a unique provider value when they onboard with Cloud Commerce platform.
  &quot;quoteExternalName&quot;: &quot;A String&quot;, # Output only. The identifier of the quote that was used to procure. Empty if the order is not purchased using a quote.
  &quot;state&quot;: &quot;A String&quot;, # Output only. The state of the entitlement.
  &quot;subscriptionEndTime&quot;: &quot;A String&quot;, # Output only. End time for the subscription corresponding to this entitlement.
  &quot;updateTime&quot;: &quot;A String&quot;, # Output only. The last update timestamp.
  &quot;usageReportingId&quot;: &quot;A String&quot;, # Output only. The consumerId to use when reporting usage through the Service Control API. See the consumerId field at [Reporting Metrics](https://cloud.google.com/service-control/reporting-metrics) for more details. This field is present only if the product has usage-based billing configured.
}</pre>
</div>

<div class="method">
    <code class="details" id="reject">reject(name, body=None, x__xgafv=None)</code>
  <pre>Rejects an entitlement that is in the EntitlementState.ENTITLEMENT_ACTIVATION_REQUESTED state. This method is invoked by the provider to reject the creation of the entitlement resource.

Args:
  name: string, The resource name of the entitlement. Required. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for PartnerProcurementService.RejectEntitlement.
  &quot;reason&quot;: &quot;A String&quot;, # Free form text string explaining the rejection reason. Max allowed length: 256 bytes. Longer strings will be truncated.
}

  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="rejectPlanChange">rejectPlanChange(name, body=None, x__xgafv=None)</code>
  <pre>Rejects an entitlement plan change that is in the EntitlementState.ENTITLEMENT_PENDING_PLAN_CHANGE_APPROVAL state. This method is invoked by the provider to reject the plan change on the entitlement resource.

Args:
  name: string, The resource name of the entitlement. Required. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for PartnerProcurementService.RejectEntitlementPlanChange.
  &quot;pendingPlanName&quot;: &quot;A String&quot;, # Name of the pending plan that is being rejected. Required.
  &quot;reason&quot;: &quot;A String&quot;, # Free form text string explaining the rejection reason. Max allowed length: 256 bytes. Longer strings will be truncated.
}

  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="suspend">suspend(name, body=None, x__xgafv=None)</code>
  <pre>Requests suspension of an active Entitlement. This is not yet supported.

Args:
  name: string, The name of the entitlement to suspend. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request message for ParterProcurementService.SuspendEntitlement. This is not yet supported.
  &quot;reason&quot;: &quot;A String&quot;, # A free-form reason string, explaining the reason for suspension request.
}

  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>

</body></html>