<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="androidpublisher_v3.html">Google Play Android Developer API</a> . <a href="androidpublisher_v3.purchases.html">purchases</a> . <a href="androidpublisher_v3.purchases.subscriptions.html">subscriptions</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#acknowledge">acknowledge(packageName, subscriptionId, token, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Acknowledges a subscription purchase.</p>
<p class="toc_element">
  <code><a href="#cancel">cancel(packageName, subscriptionId, token, x__xgafv=None)</a></code></p>
<p class="firstline">Cancels a user's subscription purchase. The subscription remains valid</p>
<p class="toc_element">
  <code><a href="#defer">defer(packageName, subscriptionId, token, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Defers a user's subscription purchase until a specified future expiration</p>
<p class="toc_element">
  <code><a href="#get">get(packageName, subscriptionId, token, x__xgafv=None)</a></code></p>
<p class="firstline">Checks whether a user's subscription purchase is valid and returns its</p>
<p class="toc_element">
  <code><a href="#refund">refund(packageName, subscriptionId, token, x__xgafv=None)</a></code></p>
<p class="firstline">Refunds a user's subscription purchase, but the subscription remains valid</p>
<p class="toc_element">
  <code><a href="#revoke">revoke(packageName, subscriptionId, token, x__xgafv=None)</a></code></p>
<p class="firstline">Refunds and immediately revokes a user's subscription purchase. Access to</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="acknowledge">acknowledge(packageName, subscriptionId, token, body=None, x__xgafv=None)</code>
  <pre>Acknowledges a subscription purchase.

Args:
  packageName: string, The package name of the application for which this subscription was
purchased (for example, &#x27;com.some.thing&#x27;). (required)
  subscriptionId: string, The purchased subscription ID (for example, &#x27;monthly001&#x27;). (required)
  token: string, The token provided to the user&#x27;s device when the subscription was
purchased. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request for the purchases.subscriptions.acknowledge API.
    &quot;developerPayload&quot;: &quot;A String&quot;, # Payload to attach to the purchase.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
</pre>
</div>

<div class="method">
    <code class="details" id="cancel">cancel(packageName, subscriptionId, token, x__xgafv=None)</code>
  <pre>Cancels a user&#x27;s subscription purchase. The subscription remains valid
until its expiration time.

Args:
  packageName: string, The package name of the application for which this subscription was
purchased (for example, &#x27;com.some.thing&#x27;). (required)
  subscriptionId: string, The purchased subscription ID (for example, &#x27;monthly001&#x27;). (required)
  token: string, The token provided to the user&#x27;s device when the subscription was
purchased. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
</pre>
</div>

<div class="method">
    <code class="details" id="defer">defer(packageName, subscriptionId, token, body=None, x__xgafv=None)</code>
  <pre>Defers a user&#x27;s subscription purchase until a specified future expiration
time.

Args:
  packageName: string, The package name of the application for which this subscription was
purchased (for example, &#x27;com.some.thing&#x27;). (required)
  subscriptionId: string, The purchased subscription ID (for example, &#x27;monthly001&#x27;). (required)
  token: string, The token provided to the user&#x27;s device when the subscription was
purchased. (required)
  body: object, The request body.
    The object takes the form of:

{ # Request for the purchases.subscriptions.defer API.
    &quot;deferralInfo&quot;: { # A SubscriptionDeferralInfo contains the data needed to defer a # The information about the new desired expiry time for the subscription.
        # subscription purchase to a future expiry time.
      &quot;desiredExpiryTimeMillis&quot;: &quot;A String&quot;, # The desired next expiry time to assign to the subscription, in
          # milliseconds since the Epoch. The given time must be later/greater
          # than the current expiry time for the subscription.
      &quot;expectedExpiryTimeMillis&quot;: &quot;A String&quot;, # The expected expiry time for the subscription.  If the current
          # expiry time for the subscription is not the value specified
          # here, the deferral will not occur.
    },
  }

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

Returns:
  An object of the form:

    { # Response for the purchases.subscriptions.defer API.
    &quot;newExpiryTimeMillis&quot;: &quot;A String&quot;, # The new expiry time for the subscription in milliseconds since the Epoch.
  }</pre>
</div>

<div class="method">
    <code class="details" id="get">get(packageName, subscriptionId, token, x__xgafv=None)</code>
  <pre>Checks whether a user&#x27;s subscription purchase is valid and returns its
expiry time.

Args:
  packageName: string, The package name of the application for which this subscription was
purchased (for example, &#x27;com.some.thing&#x27;). (required)
  subscriptionId: string, The purchased subscription ID (for example, &#x27;monthly001&#x27;). (required)
  token: string, The token provided to the user&#x27;s device when the subscription was
purchased. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # A SubscriptionPurchase resource indicates the status of a user&#x27;s
      # subscription purchase.
    &quot;priceChange&quot;: { # Contains the price change information for a subscription that can be used to # The latest price change information available. This is present only when
        # there is an upcoming price change for the subscription yet to be applied.
        #
        # Once the subscription renews with the new price or the subscription is
        # canceled, no price change information will be returned.
        # control the user journey for the price change in the app. This can be in the
        # form of seeking confirmation from the user or tailoring the experience for a
        # successful conversion.
      &quot;newPrice&quot;: { # Definition of a price, i.e. currency and units. # The new price the subscription will renew with if the price change is
          # accepted by the user.
        &quot;currency&quot;: &quot;A String&quot;, # 3 letter Currency code, as defined by ISO 4217.
            # See java/com/google/common/money/CurrencyCode.java
        &quot;priceMicros&quot;: &quot;A String&quot;, # Price in 1/million of the currency base unit, represented as a string.
      },
      &quot;state&quot;: 42, # The current state of the price change. Possible values are:
          # 0. Outstanding: State for a pending price change waiting for the user to
          #     agree. In this state, you can optionally seek confirmation from the
          #     user using the In-App API.
          # 1. Accepted: State for an accepted price change that the subscription
          #     will renew with unless it&#x27;s canceled. The price change takes effect on
          #     a future date when the subscription renews. Note that the change might
          #     not occur when the subscription is renewed next.
    },
    &quot;autoResumeTimeMillis&quot;: &quot;A String&quot;, # Time at which the subscription will be automatically resumed, in
        # milliseconds since the Epoch. Only present if the user has requested to
        # pause the subscription.
    &quot;kind&quot;: &quot;A String&quot;, # This kind represents a subscriptionPurchase object in the androidpublisher
        # service.
    &quot;userCancellationTimeMillis&quot;: &quot;A String&quot;, # The time at which the subscription was canceled by the user, in
        # milliseconds since the epoch. Only present if cancelReason is 0.
    &quot;obfuscatedExternalAccountId&quot;: &quot;A String&quot;, # An obfuscated version of the id that is uniquely associated with the
        # user&#x27;s account in your app. Present for the following purchases:
        #   * If account linking happened as part of the subscription purchase flow.
        #   * It was specified using
        #     https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setobfuscatedaccountid
        #     when the purchase was made.
    &quot;emailAddress&quot;: &quot;A String&quot;, # The email address of the user when the subscription was purchased.
        # Only present for purchases made with &#x27;Subscribe with Google&#x27;.
    &quot;profileId&quot;: &quot;A String&quot;, # The Google profile id of the user when the subscription was purchased.
        # Only present for purchases made with &#x27;Subscribe with Google&#x27;.
    &quot;externalAccountId&quot;: &quot;A String&quot;, # User account identifier in the third-party service.
        # Only present if account linking happened as part of the subscription
        # purchase flow.
    &quot;paymentState&quot;: 42, # The payment state of the subscription. Possible values are:
        # 0. Payment pending
        # 1. Payment received
        # 2. Free trial
        # 3. Pending deferred upgrade/downgrade
    &quot;startTimeMillis&quot;: &quot;A String&quot;, # Time at which the subscription was granted, in milliseconds
        # since the Epoch.
    &quot;orderId&quot;: &quot;A String&quot;, # The order id of the latest recurring order associated with
        # the purchase of the subscription.
    &quot;linkedPurchaseToken&quot;: &quot;A String&quot;, # The purchase token of the originating purchase if this subscription
        # is one of the following:
        # 0. Re-signup of a canceled but non-lapsed subscription
        # 1. Upgrade/downgrade from a previous subscription
        #
        # For example, suppose a user originally signs up and you receive
        # purchase token X, then the user cancels and goes through the
        # resignup flow (before their subscription lapses) and you receive
        # purchase token Y, and finally the user upgrades their subscription
        # and you receive purchase token Z. If you call this API with purchase
        # token Z, this field will be set to Y. If you call this API with
        # purchase token Y, this field will be set to X. If you call this API
        # with purchase token X, this field will not be set.
    &quot;autoRenewing&quot;: True or False, # Whether the subscription will automatically be renewed when it
        # reaches its current expiry time.
    &quot;promotionCode&quot;: &quot;A String&quot;, # The promotion code applied on this purchase. This field is only set if
        # a vanity code promotion is applied when the subscription was purchased.
    &quot;familyName&quot;: &quot;A String&quot;, # The family name of the user when the subscription was purchased.
        # Only present for purchases made with &#x27;Subscribe with Google&#x27;.
    &quot;acknowledgementState&quot;: 42, # The acknowledgement state of the subscription product. Possible values
        # are:
        # 0. Yet to be acknowledged
        # 1. Acknowledged
    &quot;obfuscatedExternalProfileId&quot;: &quot;A String&quot;, # An obfuscated version of the id that is uniquely associated with the
        # user&#x27;s profile in your app. Only present if specified using
        # https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setobfuscatedprofileid
        # when the purchase was made.
    &quot;profileName&quot;: &quot;A String&quot;, # The profile name of the user when the subscription was purchased.
        # Only present for purchases made with &#x27;Subscribe with Google&#x27;.
    &quot;givenName&quot;: &quot;A String&quot;, # The given name of the user when the subscription was purchased.
        # Only present for purchases made with &#x27;Subscribe with Google&#x27;.
    &quot;purchaseType&quot;: 42, # The type of purchase of the subscription. This field is only set if
        # this purchase was not made using the standard in-app billing flow.
        # Possible values are:
        # 0. Test (i.e. purchased from a license testing account)
        # 1. Promo (i.e. purchased using a promo code)
    &quot;priceCurrencyCode&quot;: &quot;A String&quot;, # ISO 4217 currency code for the subscription price. For example,
        # if the price is specified in British pounds sterling,
        # price_currency_code is &quot;GBP&quot;.
    &quot;developerPayload&quot;: &quot;A String&quot;, # A developer-specified string that contains supplemental
        # information about an order.
    &quot;priceAmountMicros&quot;: &quot;A String&quot;, # Price of the subscription, not including tax. Price is expressed
        # in micro-units, where 1,000,000 micro-units represents one unit of
        # the currency. For example, if the subscription price is &amp;euro;1.99,
        # price_amount_micros is 1990000.
    &quot;promotionType&quot;: 42, # The type of promotion applied on this purchase. This field is only set if
        # a promotion is applied when the subscription was purchased. Possible
        # values are:
        # 0. One time code
        # 1. Vanity code
    &quot;countryCode&quot;: &quot;A String&quot;, # ISO 3166-1 alpha-2 billing country/region code of the user at the time
        # the subscription was granted.
    &quot;expiryTimeMillis&quot;: &quot;A String&quot;, # Time at which the subscription will expire, in milliseconds
        # since the Epoch.
    &quot;cancelReason&quot;: 42, # The reason why a subscription was canceled or is not auto-renewing.
        # Possible values are:
        # 0. User canceled the subscription
        # 1. Subscription was canceled by the system,
        #       for example because of a billing problem
        # 2. Subscription was replaced with a new subscription
        # 3. Subscription was canceled by the developer
    &quot;introductoryPriceInfo&quot;: { # Contains the introductory price information for a subscription. # Introductory price information of the subscription. This is only present
        # when the subscription was purchased with an introductory price.
        #
        # This field does not indicate the subscription is currently in introductory
        # price period.
      &quot;introductoryPriceCurrencyCode&quot;: &quot;A String&quot;, # ISO 4217 currency code for the introductory subscription price.
          # For example, if the price is specified in British pounds sterling,
          # price_currency_code is &quot;GBP&quot;.
      &quot;introductoryPriceCycles&quot;: 42, # The number of billing period to offer introductory pricing.
      &quot;introductoryPriceAmountMicros&quot;: &quot;A String&quot;, # Introductory price of the subscription, not including tax.
          # The currency is the same as price_currency_code. Price is
          # expressed in micro-units, where 1,000,000 micro-units represents one unit
          # of the currency. For example, if the subscription price is €1.99,
          # price_amount_micros is 1990000.
      &quot;introductoryPricePeriod&quot;: &quot;A String&quot;, # Introductory price period, specified in ISO 8601 format.
          # Common values are (but not limited to) &quot;P1W&quot; (one
          # week), &quot;P1M&quot; (one month), &quot;P3M&quot; (three months), &quot;P6M&quot; (six months),
          # and &quot;P1Y&quot; (one year).
    },
    &quot;cancelSurveyResult&quot;: { # Information provided by the user when they complete the subscription # Information provided by the user when they complete the subscription
        # cancellation flow (cancellation reason survey).
        # cancellation flow (cancellation reason survey).
      &quot;cancelSurveyReason&quot;: 42, # The cancellation reason the user chose in the survey.
          # Possible values are:
          # 0. Other
          # 1. I don&#x27;t use this service enough
          # 2. Technical issues
          # 3. Cost-related reasons
          # 4. I found a better app
      &quot;userInputCancelReason&quot;: &quot;A String&quot;, # The customized input cancel reason from the user. Only present when
          # cancelReason is 0.
    },
  }</pre>
</div>

<div class="method">
    <code class="details" id="refund">refund(packageName, subscriptionId, token, x__xgafv=None)</code>
  <pre>Refunds a user&#x27;s subscription purchase, but the subscription remains valid
until its expiration time and it will continue to recur.

Args:
  packageName: string, The package name of the application for which this subscription was
purchased (for example, &#x27;com.some.thing&#x27;). (required)
  subscriptionId: string, &quot;The purchased subscription ID (for example, &#x27;monthly001&#x27;). (required)
  token: string, The token provided to the user&#x27;s device when the subscription was
purchased. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
</pre>
</div>

<div class="method">
    <code class="details" id="revoke">revoke(packageName, subscriptionId, token, x__xgafv=None)</code>
  <pre>Refunds and immediately revokes a user&#x27;s subscription purchase. Access to
the subscription will be terminated immediately and it will stop recurring.

Args:
  packageName: string, The package name of the application for which this subscription was
purchased (for example, &#x27;com.some.thing&#x27;). (required)
  subscriptionId: string, The purchased subscription ID (for example, &#x27;monthly001&#x27;). (required)
  token: string, The token provided to the user&#x27;s device when the subscription was
purchased. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format
</pre>
</div>

</body></html>