{
  "baseUrl": "https://androidpublisher.googleapis.com/",
  "title": "Google Play Android Developer API",
  "mtlsRootUrl": "https://androidpublisher.mtls.googleapis.com/",
  "id": "androidpublisher:v3",
  "ownerDomain": "google.com",
  "revision": "20261112",
  "documentationLink": "https://developers.google.com/android-publisher",
  "batchPath": "batch",
  "servicePath": "",
  "name": "androidpublisher",
  "rootUrl": "https://androidpublisher.googleapis.com/",
  "ownerName": "Google",
  "basePath": "",
  "icons": {
    "x16": "http://www.google.com/images/icons/product/search-16.gif",
    "x32": "http://www.google.com/images/icons/product/search-32.gif"
  },
  "schemas": {
    "PrepaidBasePlanType": {
      "properties": {
        "billingPeriodDuration": {
          "description": "Required. Immutable. Subscription period, specified in ISO 8601 format. For a list of acceptable billing periods, refer to the help center. The duration is immutable after the base plan is created.",
          "type": "string"
        },
        "timeExtension": {
          "enum": [
            "TIME_EXTENSION_UNSPECIFIED",
            "TIME_EXTENSION_ACTIVE",
            "TIME_EXTENSION_INACTIVE"
          ],
          "type": "string",
          "description": "Whether users should be able to extend this prepaid base plan in Google Play surfaces. Defaults to TIME_EXTENSION_ACTIVE if not specified.",
          "enumDescriptions": [
            "Unspecified state.",
            "Time extension is active. Users are allowed to top-up or extend their prepaid plan.",
            "Time extension is inactive. Users cannot top-up or extend their prepaid plan."
          ]
        }
      },
      "type": "object",
      "description": "Represents a base plan that does not automatically renew at the end of the base plan, and must be manually renewed by the user.",
      "id": "PrepaidBasePlanType"
    },
    "AppRecoveryAction": {
      "description": "Information about an app recovery action.",
      "type": "object",
      "properties": {
        "status": {
          "enumDescriptions": [
            "RecoveryStatus is unspecified.",
            "The app recovery action has not been canceled since it has been created.",
            "The recovery action has been canceled. The action cannot be resumed.",
            "The recovery action is in the draft state and has not yet been deployed to users.",
            "The recovery action is generating recovery apks.",
            "The app recovery action generation has failed."
          ],
          "type": "string",
          "enum": [
            "RECOVERY_STATUS_UNSPECIFIED",
            "RECOVERY_STATUS_ACTIVE",
            "RECOVERY_STATUS_CANCELED",
            "RECOVERY_STATUS_DRAFT",
            "RECOVERY_STATUS_GENERATION_IN_PROGRESS",
            "RECOVERY_STATUS_GENERATION_FAILED"
          ],
          "description": "The status of the recovery action."
        },
        "deployTime": {
          "description": "Timestamp of when the app recovery action is deployed to the users. Only set if the recovery action has been deployed.",
          "format": "google-datetime",
          "type": "string"
        },
        "remoteInAppUpdateData": {
          "$ref": "RemoteInAppUpdateData",
          "description": "Data about the remote in-app update action such as such as recovered user base, recoverable user base etc. Set only if the recovery action type is Remote In-App Update."
        },
        "targeting": {
          "description": "Specifies targeting criteria for the recovery action such as regions, android sdk versions, app versions etc.",
          "$ref": "Targeting"
        },
        "appRecoveryId": {
          "format": "int64",
          "description": "ID corresponding to the app recovery action.",
          "type": "string"
        },
        "createTime": {
          "type": "string",
          "format": "google-datetime",
          "description": "Timestamp of when the app recovery action is created by the developer. It is always set after creation of the recovery action."
        },
        "cancelTime": {
          "description": "Timestamp of when the app recovery action is canceled by the developer. Only set if the recovery action has been canceled.",
          "format": "google-datetime",
          "type": "string"
        },
        "lastUpdateTime": {
          "description": "Timestamp of when the developer last updated recovery action. In case the action is cancelled, it corresponds to cancellation time. It is always set after creation of the recovery action.",
          "type": "string",
          "format": "google-datetime"
        }
      },
      "id": "AppRecoveryAction"
    },
    "UpdateAppStoreHostedAppRequest": {
      "description": "Request to update an app record for an app store hosted app.",
      "type": "object",
      "properties": {
        "packageName": {
          "description": "Required. Package name of the app.",
          "type": "string"
        },
        "activeLocalizedStoreListings": {
          "type": "array",
          "description": "Required. Localized store listings details of the update.",
          "items": {
            "$ref": "AppStoreAppStoreListing"
          }
        },
        "appDetails": {
          "description": "Required. General developer details for the app.",
          "$ref": "AppStoreAppDetails"
        },
        "activeApks": {
          "$ref": "AppStoreAppActiveApks",
          "description": "Required. Actively distributed APKs of the app."
        },
        "policyDeclarations": {
          "items": {
            "$ref": "AppStoreAppPolicyDeclaration"
          },
          "description": "Required. Policy declarations provided for the app.",
          "type": "array"
        }
      },
      "id": "UpdateAppStoreHostedAppRequest"
    },
    "BatchUpdateSubscriptionOffersRequest": {
      "type": "object",
      "properties": {
        "requests": {
          "type": "array",
          "description": "Required. A list of update requests of up to 100 elements. All requests must update different subscription offers.",
          "items": {
            "$ref": "UpdateSubscriptionOfferRequest"
          }
        }
      },
      "id": "BatchUpdateSubscriptionOffersRequest",
      "description": "Request message for BatchUpdateSubscriptionOffers."
    },
    "DeferralContext": {
      "description": "Deferral context of the purchases.subscriptionsv2.defer API.",
      "id": "DeferralContext",
      "type": "object",
      "properties": {
        "validateOnly": {
          "description": "If set to \"true\", the request is a dry run to validate the effect of Defer, the subscription would not be impacted.",
          "type": "boolean"
        },
        "etag": {
          "type": "string",
          "description": "Required. The API will fail if the etag does not match the latest etag for this subscription. The etag is retrieved from purchases.subscriptionsv2.get: https://developers.google.com/android-publisher/api-ref/rest/v3/purchases.subscriptionsv2/get"
        },
        "deferDuration": {
          "type": "string",
          "format": "google-duration",
          "description": "Required. The duration by which all subscription items should be deferred."
        }
      }
    },
    "RotateAppSigningKeyResponse": {
      "properties": {
        "rotatedKeyCertificate": {
          "description": "The rotated key certificate hashes for the app. Always set.",
          "$ref": "CertificateHashes"
        }
      },
      "id": "RotateAppSigningKeyResponse",
      "type": "object",
      "description": "Response to rotate an app's signing key."
    },
    "AbiTargeting": {
      "properties": {
        "value": {
          "description": "Value of an abi.",
          "items": {
            "$ref": "Abi"
          },
          "type": "array"
        },
        "alternatives": {
          "description": "Targeting of other sibling directories that were in the Bundle. For main splits this is targeting of other main splits.",
          "items": {
            "$ref": "Abi"
          },
          "type": "array"
        }
      },
      "id": "AbiTargeting",
      "description": "Targeting based on Abi.",
      "type": "object"
    },
    "TargetingRuleScopeThisSubscription": {
      "properties": {},
      "description": "Represents the targeting rule scope corresponding to the subscriptions in which this offer is defined.",
      "id": "TargetingRuleScopeThisSubscription",
      "type": "object"
    },
    "BatchUpdateBasePlanStatesRequest": {
      "description": "Request message for BatchUpdateBasePlanStates.",
      "properties": {
        "requests": {
          "description": "Required. The update request list of up to 100 elements. All requests must update different base plans.",
          "items": {
            "$ref": "UpdateBasePlanStateRequest"
          },
          "type": "array"
        }
      },
      "id": "BatchUpdateBasePlanStatesRequest",
      "type": "object"
    },
    "OfferPhase": {
      "description": "Offer phase details.",
      "id": "OfferPhase",
      "type": "object",
      "properties": {
        "freeTrial": {
          "description": "Set when the offer phase is a free trial.",
          "$ref": "FreeTrialOfferPhase"
        },
        "prorationPeriod": {
          "description": "Set when the offer phase is a proration period.",
          "$ref": "ProrationPeriodOfferPhase"
        },
        "introductoryPrice": {
          "description": "Set when the offer phase is an introductory price offer phase.",
          "$ref": "IntroductoryPriceOfferPhase"
        },
        "basePrice": {
          "description": "Set when the offer phase is a base plan pricing phase.",
          "$ref": "BasePriceOfferPhase"
        }
      }
    },
    "ProductPurchasesAcknowledgeRequest": {
      "properties": {
        "developerPayload": {
          "description": "Payload to attach to the purchase.",
          "type": "string"
        }
      },
      "id": "ProductPurchasesAcknowledgeRequest",
      "description": "Request for the product.purchases.acknowledge API.",
      "type": "object"
    },
    "MultiAbi": {
      "id": "MultiAbi",
      "type": "object",
      "description": "Represents a list of ABIs.",
      "properties": {
        "abi": {
          "items": {
            "$ref": "Abi"
          },
          "type": "array",
          "description": "A list of targeted ABIs, as represented by the Android Platform"
        }
      }
    },
    "Money": {
      "description": "Represents an amount of money with its currency type.",
      "type": "object",
      "id": "Money",
      "properties": {
        "nanos": {
          "description": "Number of nano (10^-9) units of the amount. The value must be between -999,999,999 and +999,999,999 inclusive. If `units` is positive, `nanos` must be positive or zero. If `units` is zero, `nanos` can be positive, zero, or negative. If `units` is negative, `nanos` must be negative or zero. For example $-1.75 is represented as `units`=-1 and `nanos`=-750,000,000.",
          "type": "integer",
          "format": "int32"
        },
        "currencyCode": {
          "type": "string",
          "description": "The three-letter currency code defined in ISO 4217."
        },
        "units": {
          "description": "The whole units of the amount. For example if `currencyCode` is `\"USD\"`, then 1 unit is one US dollar.",
          "format": "int64",
          "type": "string"
        }
      }
    },
    "ArtifactSummary": {
      "id": "ArtifactSummary",
      "properties": {
        "versionCode": {
          "type": "integer",
          "description": "Artifact's version code",
          "format": "int32"
        }
      },
      "description": "Summary of an artifact.",
      "type": "object"
    },
    "DeferredItemRemoval": {
      "id": "DeferredItemRemoval",
      "description": "Information related to deferred item replacement.",
      "properties": {},
      "type": "object"
    },
    "AcquisitionTargetingRule": {
      "properties": {
        "scope": {
          "$ref": "TargetingRuleScope",
          "description": "Required. The scope of subscriptions this rule considers. Only allows \"this subscription\" and \"any subscription in app\"."
        }
      },
      "id": "AcquisitionTargetingRule",
      "description": "Represents a targeting rule of the form: User never had {scope} before.",
      "type": "object"
    },
    "CloudKmsKey": {
      "id": "CloudKmsKey",
      "properties": {
        "cryptoKeyVersionResource": {
          "type": "string",
          "description": "Required. Resource identifier of the private key hosted in Google Cloud KMS. The Google Play service account must be granted Decrypt and Sign permissions on this resource. Format: projects//locations//keyRings//cryptoKeys//cryptoKeyVersions/"
        }
      },
      "type": "object",
      "description": "Reference to a private key hosted in developer-managed Google Cloud KMS."
    },
    "OtherRecurringProduct": {
      "properties": {},
      "type": "object",
      "id": "OtherRecurringProduct",
      "description": "Details of a recurring external transaction product which doesn't belong to any other more specific category."
    },
    "DeviceFeatureTargeting": {
      "description": "Targeting for a device feature.",
      "type": "object",
      "id": "DeviceFeatureTargeting",
      "properties": {
        "requiredFeature": {
          "description": "Feature of the device.",
          "$ref": "DeviceFeature"
        }
      }
    },
    "AutoRenewingBasePlanType": {
      "id": "AutoRenewingBasePlanType",
      "type": "object",
      "description": "Represents a base plan that automatically renews at the end of its subscription period.",
      "properties": {
        "billingPeriodDuration": {
          "description": "Required. Immutable. Subscription period, specified in ISO 8601 format. For a list of acceptable billing periods, refer to the help center. The duration is immutable after the base plan is created.",
          "type": "string"
        },
        "resubscribeState": {
          "enumDescriptions": [
            "Unspecified state.",
            "Resubscribe is active.",
            "Resubscribe is inactive."
          ],
          "type": "string",
          "description": "Whether users should be able to resubscribe to this base plan in Google Play surfaces. Defaults to RESUBSCRIBE_STATE_ACTIVE if not specified.",
          "enum": [
            "RESUBSCRIBE_STATE_UNSPECIFIED",
            "RESUBSCRIBE_STATE_ACTIVE",
            "RESUBSCRIBE_STATE_INACTIVE"
          ]
        },
        "gracePeriodDuration": {
          "description": "Grace period of the subscription, specified in ISO 8601 format. Acceptable values must be in days and between P0D and the lesser of 30D and base plan billing period. If not specified, a default value will be used based on the billing period. The sum of gracePeriodDuration and accountHoldDuration must be between P30D and P60D days, inclusive.",
          "type": "string"
        },
        "prorationMode": {
          "enum": [
            "SUBSCRIPTION_PRORATION_MODE_UNSPECIFIED",
            "SUBSCRIPTION_PRORATION_MODE_CHARGE_ON_NEXT_BILLING_DATE",
            "SUBSCRIPTION_PRORATION_MODE_CHARGE_FULL_PRICE_IMMEDIATELY"
          ],
          "type": "string",
          "description": "The proration mode for the base plan determines what happens when a user switches to this plan from another base plan. If unspecified, defaults to CHARGE_ON_NEXT_BILLING_DATE.",
          "enumDescriptions": [
            "Unspecified mode.",
            "Users will be charged for their new base plan at the end of their current billing period.",
            "Users will be charged for their new base plan immediately and in full. Any remaining period of their existing subscription will be used to extend the duration of the new billing plan."
          ]
        },
        "accountHoldDuration": {
          "type": "string",
          "description": "Optional. Custom account hold period of the subscription, specified in ISO 8601 format. Acceptable values must be in days and between P0D and P60D. An empty field represents a recommended account hold, calculated as 60 days minus grace period. The sum of gracePeriodDuration and accountHoldDuration must be between P30D and P60D days, inclusive."
        },
        "legacyCompatible": {
          "type": "boolean",
          "description": "Whether the renewing base plan is backward compatible. The backward compatible base plan is returned by the Google Play Billing Library deprecated method querySkuDetailsAsync(). Only one renewing base plan can be marked as legacy compatible for a given subscription."
        },
        "legacyCompatibleSubscriptionOfferId": {
          "type": "string",
          "description": "Subscription offer id which is legacy compatible. The backward compatible subscription offer is returned by the Google Play Billing Library deprecated method querySkuDetailsAsync(). Only one subscription offer can be marked as legacy compatible for a given renewing base plan. To have no Subscription offer as legacy compatible set this field as empty string."
        }
      }
    },
    "BatchUpdateOneTimeProductOfferStatesResponse": {
      "id": "BatchUpdateOneTimeProductOfferStatesResponse",
      "description": "Response message for BatchUpdateOneTimeProductOfferStates.",
      "type": "object",
      "properties": {
        "oneTimeProductOffers": {
          "description": "The updated one-time product offers list, in the same order as the request.",
          "items": {
            "$ref": "OneTimeProductOffer"
          },
          "type": "array"
        }
      }
    },
    "PausedStateContext": {
      "description": "Information specific to a subscription in paused state.",
      "properties": {
        "autoResumeTime": {
          "description": "Time at which the subscription will be automatically resumed.",
          "type": "string",
          "format": "google-datetime"
        }
      },
      "id": "PausedStateContext",
      "type": "object"
    },
    "BuyerAddress": {
      "type": "object",
      "description": "Address information for the customer, for use in tax computation.",
      "properties": {
        "buyerPostcode": {
          "type": "string",
          "description": "Postal code of an address. When Google is the Merchant of Record for the order, this information is not included."
        },
        "buyerCountry": {
          "description": "Two letter country code based on ISO-3166-1 Alpha-2 (UN country codes).",
          "type": "string"
        },
        "buyerState": {
          "description": "Top-level administrative subdivision of the buyer address country. When Google is the Merchant of Record for the order, this information is not included.",
          "type": "string"
        }
      },
      "id": "BuyerAddress"
    },
    "ListOneTimeProductsResponse": {
      "id": "ListOneTimeProductsResponse",
      "description": "Response message for ListOneTimeProducts.",
      "type": "object",
      "properties": {
        "oneTimeProducts": {
          "description": "The one-time products from the specified app.",
          "items": {
            "$ref": "OneTimeProduct"
          },
          "type": "array"
        },
        "nextPageToken": {
          "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.",
          "type": "string"
        }
      }
    },
    "SubscriptionPurchaseV2": {
      "type": "object",
      "id": "SubscriptionPurchaseV2",
      "description": "Indicates the status of a user's subscription purchase.",
      "properties": {
        "acknowledgementState": {
          "enum": [
            "ACKNOWLEDGEMENT_STATE_UNSPECIFIED",
            "ACKNOWLEDGEMENT_STATE_PENDING",
            "ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED"
          ],
          "type": "string",
          "enumDescriptions": [
            "Unspecified acknowledgement state.",
            "The subscription is not acknowledged yet.",
            "The subscription is acknowledged."
          ],
          "description": "The acknowledgement state of the subscription."
        },
        "inGracePeriodStateContext": {
          "$ref": "InGracePeriodStateContext",
          "description": "Optional. Additional context around subscriptions in IN_GRACE_PERIOD state. Only present if the subscription currently has subscription_state SUBSCRIPTION_STATE_IN_GRACE_PERIOD."
        },
        "onHoldStateContext": {
          "description": "Optional. Additional context around subscriptions in ON_HOLD state. Only present if the subscription currently has subscription_state SUBSCRIPTION_STATE_ON_HOLD.",
          "$ref": "OnHoldStateContext"
        },
        "outOfAppPurchaseContext": {
          "description": "Additional context for out of app purchases. This information is only present for re-subscription purchases (subscription purchases made after the previous subscription of the same product has expired) made through the Google Play subscriptions center. This field will be removed after you acknowledge the subscription.",
          "$ref": "OutOfAppPurchaseContext"
        },
        "kind": {
          "description": "This kind represents a SubscriptionPurchaseV2 object in the androidpublisher service.",
          "type": "string"
        },
        "linkedPurchaseToken": {
          "type": "string",
          "description": "The purchase token of the old subscription if this subscription is one of the following: * Re-signup of a canceled but non-lapsed subscription * Upgrade/downgrade from a previous subscription. * Convert from prepaid to auto renewing subscription. * Convert from an auto renewing subscription to prepaid. * Topup a prepaid subscription."
        },
        "testPurchase": {
          "description": "Only present if this subscription purchase is a test purchase.",
          "$ref": "TestPurchase"
        },
        "pausedStateContext": {
          "$ref": "PausedStateContext",
          "description": "Additional context around paused subscriptions. Only present if the subscription currently has subscription_state SUBSCRIPTION_STATE_PAUSED."
        },
        "startTime": {
          "format": "google-datetime",
          "type": "string",
          "description": "Time at which the subscription was granted. Not set for pending subscriptions (subscription was created but awaiting payment during signup)."
        },
        "etag": {
          "type": "string",
          "description": "Entity tag representing the current state of the subscription. The developer will provide this etag for subscription actions. This etag is always present for auto-renewing and prepaid subscriptions."
        },
        "canceledStateContext": {
          "description": "Additional context around canceled subscriptions. Only present if the subscription currently has subscription_state SUBSCRIPTION_STATE_CANCELED or SUBSCRIPTION_STATE_EXPIRED.",
          "$ref": "CanceledStateContext"
        },
        "lineItems": {
          "type": "array",
          "description": "Item-level info for a subscription purchase. The items in the same purchase should be either all with AutoRenewingPlan or all with PrepaidPlan.",
          "items": {
            "$ref": "SubscriptionPurchaseLineItem"
          }
        },
        "externalAccountIdentifiers": {
          "$ref": "ExternalAccountIdentifiers",
          "description": "User account identifier in the third-party service."
        },
        "subscribeWithGoogleInfo": {
          "description": "User profile associated with purchases made with 'Subscribe with Google'.",
          "$ref": "SubscribeWithGoogleInfo"
        },
        "regionCode": {
          "description": "ISO 3166-1 alpha-2 billing country/region code of the user at the time the subscription was granted.",
          "type": "string"
        },
        "subscriptionState": {
          "enum": [
            "SUBSCRIPTION_STATE_UNSPECIFIED",
            "SUBSCRIPTION_STATE_PENDING",
            "SUBSCRIPTION_STATE_ACTIVE",
            "SUBSCRIPTION_STATE_PAUSED",
            "SUBSCRIPTION_STATE_IN_GRACE_PERIOD",
            "SUBSCRIPTION_STATE_ON_HOLD",
            "SUBSCRIPTION_STATE_CANCELED",
            "SUBSCRIPTION_STATE_EXPIRED",
            "SUBSCRIPTION_STATE_PENDING_PURCHASE_CANCELED"
          ],
          "enumDescriptions": [
            "Unspecified subscription state.",
            "Subscription was created but awaiting payment during signup. In this state, all items are awaiting payment.",
            "Subscription is active. - (1) If the subscription is an auto renewing plan, at least one item is auto_renew_enabled and not expired. - (2) If the subscription is a prepaid plan, at least one item is not expired.",
            "Subscription is paused. The state is only available when the subscription is an auto renewing plan. In this state, all items are in paused state.",
            "Subscription is in grace period. The state is only available when the subscription is an auto renewing plan. In this state, all items are in grace period.",
            "Subscription is on hold (suspended). The state is only available when the subscription is an auto renewing plan. In this state, all items are on hold.",
            "Subscription is canceled but not expired yet. The state is only available when the subscription is an auto renewing plan. All items have auto_renew_enabled set to false.",
            "Subscription is expired. All items have expiry_time in the past.",
            "Pending transaction for subscription is canceled. If this pending purchase was for an existing subscription, use linked_purchase_token to get the current state of that subscription."
          ],
          "type": "string",
          "description": "The current state of the subscription."
        }
      }
    },
    "RecentUpdateEvent": {
      "properties": {
        "updateType": {
          "description": "The type of the update event.",
          "enumDescriptions": [
            "Default value. This value is not used.",
            "The app was modified.",
            "The app stopped being eligible for catalog inclusion or was removed from the Play Store."
          ],
          "enum": [
            "UPDATE_TYPE_UNSPECIFIED",
            "MODIFICATION",
            "DELETION"
          ],
          "type": "string"
        },
        "playAppPackageName": {
          "description": "The package name of the app.",
          "type": "string"
        },
        "eventTime": {
          "description": "The timestamp of the update.",
          "format": "google-datetime",
          "type": "string"
        }
      },
      "description": "A recent update event.",
      "id": "RecentUpdateEvent",
      "type": "object"
    },
    "ManagedProductTaxAndComplianceSettings": {
      "description": "Details about taxation and legal compliance for managed products.",
      "type": "object",
      "id": "ManagedProductTaxAndComplianceSettings",
      "properties": {
        "taxRateInfoByRegionCode": {
          "description": "A mapping from region code to tax rate details. The keys are region codes as defined by Unicode's \"CLDR\".",
          "type": "object",
          "additionalProperties": {
            "$ref": "RegionalTaxRateInfo"
          }
        },
        "eeaWithdrawalRightType": {
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "description": "Digital content or service classification for products distributed to users in the European Economic Area (EEA). The withdrawal regime under EEA consumer laws depends on this classification. Refer to the [Help Center article](https://support.google.com/googleplay/android-developer/answer/10463498) for more information.",
          "type": "string",
          "enum": [
            "WITHDRAWAL_RIGHT_TYPE_UNSPECIFIED",
            "WITHDRAWAL_RIGHT_DIGITAL_CONTENT",
            "WITHDRAWAL_RIGHT_SERVICE"
          ]
        },
        "productTaxCategoryCode": {
          "description": "Product tax category code to assign to the in-app product. Product tax category determines the transaction tax rates applied to the product. Refer to the [Help Center article](https://support.google.com/googleplay/android-developer/answer/16408159) for more information.",
          "type": "string"
        },
        "isTokenizedDigitalAsset": {
          "type": "boolean",
          "description": "Whether this in-app product is declared as a product representing a tokenized digital asset."
        },
        "regionalProductAgeRatingInfos": {
          "items": {
            "$ref": "RegionalProductAgeRatingInfo"
          },
          "type": "array",
          "description": "Regional age rating information. Currently this field is only supported for region code `US`."
        }
      }
    },
    "ActivatePurchaseOptionRequest": {
      "type": "object",
      "description": "Request message for UpdatePurchaseOptionState.",
      "properties": {
        "packageName": {
          "type": "string",
          "description": "Required. The parent app (package name) of the purchase option to activate."
        },
        "latencyTolerance": {
          "enumDescriptions": [
            "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
            "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
            "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
          ],
          "type": "string",
          "description": "Optional. The latency tolerance for the propagation of this product update. Defaults to latency-sensitive.",
          "enum": [
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
          ]
        },
        "purchaseOptionId": {
          "type": "string",
          "description": "Required. The purchase option ID of the purchase option to activate."
        },
        "productId": {
          "description": "Required. The parent one-time product (ID) of the purchase option to activate.",
          "type": "string"
        }
      },
      "id": "ActivatePurchaseOptionRequest"
    },
    "OtherRegionsSubscriptionOfferConfig": {
      "id": "OtherRegionsSubscriptionOfferConfig",
      "properties": {
        "otherRegionsNewSubscriberAvailability": {
          "type": "boolean",
          "description": "Whether the subscription offer in any new locations Play may launch in the future. If not specified, this will default to false."
        }
      },
      "description": "Configuration for any new locations Play may launch in specified on a subscription offer.",
      "type": "object"
    },
    "SystemApksListResponse": {
      "id": "SystemApksListResponse",
      "description": "Response to list previously created system APK variants.",
      "type": "object",
      "properties": {
        "variants": {
          "items": {
            "$ref": "Variant"
          },
          "description": "All system APK variants created.",
          "type": "array"
        }
      }
    },
    "GeneratedApksPerSigningKey": {
      "description": "Download metadata for split, standalone and universal APKs, as well as asset pack slices, signed with a given key.",
      "type": "object",
      "properties": {
        "unprotectedGeneratedSplitApks": {
          "type": "array",
          "description": "List of generated split APKs without automatic protection, signed with a key corresponding to certificate_sha256_hash. This field is only present if the app uses automatic protection. In this case, `generated_split_apks` contains APKs with automatic protection enabled, whereas this field contains APKs without automatic protection.",
          "items": {
            "$ref": "GeneratedSplitApk"
          }
        },
        "unprotectedGeneratedStandaloneApks": {
          "type": "array",
          "description": "List of generated standalone APKs without automatic protection, signed with a key corresponding to certificate_sha256_hash. This field is only present if the app uses automatic protection. In this case, `generated_standalone_apks` contains APKs with automatic protection enabled, whereas this field contains APKs without automatic protection.",
          "items": {
            "$ref": "GeneratedStandaloneApk"
          }
        },
        "generatedStandaloneApks": {
          "items": {
            "$ref": "GeneratedStandaloneApk"
          },
          "description": "List of generated standalone APKs, signed with a key corresponding to certificate_sha256_hash.",
          "type": "array"
        },
        "generatedAssetPackSlices": {
          "items": {
            "$ref": "GeneratedAssetPackSlice"
          },
          "type": "array",
          "description": "List of asset pack slices which will be served for this app bundle, signed with a key corresponding to certificate_sha256_hash."
        },
        "generatedUniversalApk": {
          "description": "Generated universal APK, signed with a key corresponding to certificate_sha256_hash. This field is not set if no universal APK was generated for this signing key.",
          "$ref": "GeneratedUniversalApk"
        },
        "certificateSha256Hash": {
          "description": "SHA256 hash of the APK signing public key certificate.",
          "type": "string"
        },
        "targetingInfo": {
          "description": "Contains targeting information about the generated apks.",
          "$ref": "TargetingInfo"
        },
        "generatedSplitApks": {
          "items": {
            "$ref": "GeneratedSplitApk"
          },
          "type": "array",
          "description": "List of generated split APKs, signed with a key corresponding to certificate_sha256_hash."
        },
        "generatedRecoveryModules": {
          "items": {
            "$ref": "GeneratedRecoveryApk"
          },
          "type": "array",
          "description": "Generated recovery apks for recovery actions signed with a key corresponding to certificate_sha256_hash. This includes all generated recovery APKs, also those in draft or cancelled state. This field is not set if no recovery actions were created for this signing key."
        }
      },
      "id": "GeneratedApksPerSigningKey"
    },
    "PaidAppDetails": {
      "id": "PaidAppDetails",
      "description": "Details of a paid app purchase.",
      "type": "object",
      "properties": {}
    },
    "RevocationContext": {
      "id": "RevocationContext",
      "description": "Revocation context of the purchases.subscriptionsv2.revoke API.",
      "type": "object",
      "properties": {
        "itemBasedRefund": {
          "description": "Optional. Used when a specific item should be refunded in a subscription with add-on items.",
          "$ref": "RevocationContextItemBasedRefund"
        },
        "fullRefund": {
          "description": "Optional. Used when users should be refunded the full amount of latest charge on each item in the subscription.",
          "$ref": "RevocationContextFullRefund"
        },
        "proratedRefund": {
          "$ref": "RevocationContextProratedRefund",
          "description": "Optional. Used when users should be refunded a prorated amount they paid for their subscription based on the amount of time remaining in a subscription."
        }
      }
    },
    "ActivateSubscriptionOfferRequest": {
      "description": "Request message for ActivateSubscriptionOffer.",
      "properties": {
        "basePlanId": {
          "type": "string",
          "description": "Required. The parent base plan (ID) of the offer to activate."
        },
        "productId": {
          "type": "string",
          "description": "Required. The parent subscription (ID) of the offer to activate."
        },
        "offerId": {
          "type": "string",
          "description": "Required. The unique offer ID of the offer to activate."
        },
        "packageName": {
          "description": "Required. The parent app (package name) of the offer to activate.",
          "type": "string"
        },
        "latencyTolerance": {
          "enum": [
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
          ],
          "type": "string",
          "description": "Optional. The latency tolerance for the propagation of this product update. Defaults to latency-sensitive.",
          "enumDescriptions": [
            "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
            "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
            "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
          ]
        }
      },
      "id": "ActivateSubscriptionOfferRequest",
      "type": "object"
    },
    "BatchUpdateOneTimeProductOffersRequest": {
      "id": "BatchUpdateOneTimeProductOffersRequest",
      "description": "Request message for BatchUpdateOneTimeProductOffers.",
      "type": "object",
      "properties": {
        "requests": {
          "items": {
            "$ref": "UpdateOneTimeProductOfferRequest"
          },
          "type": "array",
          "description": "Required. A list of update requests of up to 100 elements. All requests must update different offers."
        }
      }
    },
    "BatchGetOrdersResponse": {
      "type": "object",
      "description": "Response for the orders.batchGet API.",
      "id": "BatchGetOrdersResponse",
      "properties": {
        "orders": {
          "type": "array",
          "items": {
            "$ref": "Order"
          },
          "description": "Details for the requested order IDs."
        }
      }
    },
    "UploadApkRequest": {
      "type": "object",
      "properties": {},
      "id": "UploadApkRequest",
      "description": "Request to upload an APK."
    },
    "OtherRegionsSubscriptionOfferPhaseConfig": {
      "description": "Configuration for any new locations Play may launch in for a single offer phase.",
      "id": "OtherRegionsSubscriptionOfferPhaseConfig",
      "properties": {
        "free": {
          "$ref": "OtherRegionsSubscriptionOfferPhaseFreePriceOverride",
          "description": "Set to specify this offer is free to obtain."
        },
        "otherRegionsPrices": {
          "$ref": "OtherRegionsSubscriptionOfferPhasePrices",
          "description": "The absolute price the user pays for this offer phase. The price must not be smaller than the minimum price allowed for any new locations Play may launch in."
        },
        "relativeDiscount": {
          "description": "The percentage discount subtracted from the base plan price prorated over the phase duration, specified as a fraction strictly larger than `0` and strictly smaller than `1`. For example, a value of `0.8` represents an 80% discount, meaning that if the prorated base plan price is $100, the offer price will be $20. The resulting price will be rounded to the nearest billable unit (e.g. cents for USD). The relative discount is considered invalid if the discounted price ends up being smaller than the minimum price allowed in any new locations Play may launch in.",
          "type": "number",
          "format": "double"
        },
        "absoluteDiscounts": {
          "description": "The absolute amount of money subtracted from the base plan price prorated over the phase duration. For example, if the base plan price for this region is $12 for a period of 1 year, then a $1 absolute discount for a phase of a duration of 3 months would correspond to a price of $2. The resulting price may not be smaller than the minimum price allowed for any new locations Play may launch in.",
          "$ref": "OtherRegionsSubscriptionOfferPhasePrices"
        }
      },
      "type": "object"
    },
    "DeactivatePurchaseOptionRequest": {
      "properties": {
        "packageName": {
          "description": "Required. The parent app (package name) of the purchase option to deactivate.",
          "type": "string"
        },
        "latencyTolerance": {
          "description": "Optional. The latency tolerance for the propagation of this product update. Defaults to latency-sensitive.",
          "type": "string",
          "enum": [
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
          ],
          "enumDescriptions": [
            "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
            "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
            "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
          ]
        },
        "purchaseOptionId": {
          "type": "string",
          "description": "Required. The purchase option ID of the purchase option to deactivate."
        },
        "productId": {
          "description": "Required. The parent one-time product (ID) of the purchase option to deactivate.",
          "type": "string"
        }
      },
      "type": "object",
      "id": "DeactivatePurchaseOptionRequest",
      "description": "Request message for UpdatePurchaseOptionState."
    },
    "TrackRelease": {
      "type": "object",
      "properties": {
        "versionCodes": {
          "description": "Version codes of all APKs in the release. Must include version codes to retain from previous releases.",
          "type": "array",
          "items": {
            "type": "string",
            "format": "int64"
          }
        },
        "userFraction": {
          "type": "number",
          "format": "double",
          "description": "Fraction of users who are eligible for a staged release. 0 \u003c fraction \u003c 1. Can only be set when status is \"inProgress\" or \"halted\"."
        },
        "status": {
          "enumDescriptions": [
            "Unspecified status.",
            "The release's APKs are not being served to users.",
            "The release's APKs are being served to a fraction of users, determined by 'user_fraction'.",
            "The release's APKs will no longer be served to users. Users who already have these APKs are unaffected.",
            "The release will have no further changes. Its APKs are being served to all users, unless they are eligible to APKs of a more recent release."
          ],
          "type": "string",
          "description": "The status of the release.",
          "enum": [
            "statusUnspecified",
            "draft",
            "inProgress",
            "halted",
            "completed"
          ]
        },
        "countryTargeting": {
          "description": "Restricts a release to a specific set of countries. Note this is only allowed to be set for inProgress releases in the production track.",
          "$ref": "CountryTargeting"
        },
        "inAppUpdatePriority": {
          "format": "int32",
          "type": "integer",
          "description": "In-app update priority of the release. All newly added APKs in the release will be considered at this priority. Can take values in the range [0, 5], with 5 the highest priority. Defaults to 0. in_app_update_priority can not be updated once the release is rolled out. See https://developer.android.com/guide/playcore/in-app-updates."
        },
        "name": {
          "description": "The release name. Not required to be unique. If not set, the name is generated from the APK's version_name. If the release contains multiple APKs, the name is generated from the date.",
          "type": "string"
        },
        "releaseNotes": {
          "items": {
            "$ref": "LocalizedText"
          },
          "description": "A description of what is new in this release.",
          "type": "array"
        }
      },
      "description": "A release within a track.",
      "id": "TrackRelease"
    },
    "PolicyKeyedGroupResponse": {
      "type": "object",
      "id": "PolicyKeyedGroupResponse",
      "description": "A group of responses each identified by a distinct key within an allowed set.",
      "properties": {
        "groups": {
          "items": {
            "$ref": "KeyedGroup"
          },
          "type": "array",
          "description": "Optional. Groups of responses to questions. Each KeyedGroup.key must be unique within this list."
        }
      }
    },
    "RevocationContextProratedRefund": {
      "properties": {},
      "description": "Used to determine if the refund type in the RevocationContext is a prorated refund.",
      "id": "RevocationContextProratedRefund",
      "type": "object"
    },
    "ProductLineItem": {
      "id": "ProductLineItem",
      "description": "Contains item-level info for a ProductPurchaseV2.",
      "type": "object",
      "properties": {
        "productId": {
          "type": "string",
          "description": "The purchased product ID (for example, 'monthly001')."
        },
        "productOfferDetails": {
          "description": "The offer details for this item.",
          "$ref": "ProductOfferDetails"
        }
      }
    },
    "PriceStepUpConsentDetails": {
      "id": "PriceStepUpConsentDetails",
      "type": "object",
      "properties": {
        "state": {
          "enumDescriptions": [
            "Unspecified consent state.",
            "The user has not yet provided consent.",
            "The user has consented, and the new price is waiting to take effect.",
            "The user has consented, and the new price has taken effect."
          ],
          "description": "Output only. The state of the price step-up consent.",
          "type": "string",
          "readOnly": true,
          "enum": [
            "CONSENT_STATE_UNSPECIFIED",
            "PENDING",
            "CONFIRMED",
            "COMPLETED"
          ]
        },
        "newPrice": {
          "$ref": "Money",
          "description": "The new price which requires user consent."
        },
        "consentDeadlineTime": {
          "description": "The deadline by which the user must provide consent. If consent is not provided by this time, the subscription will be canceled.",
          "format": "google-datetime",
          "type": "string"
        }
      },
      "description": "Information related to a price step-up that requires user consent."
    },
    "GeneratedSplitApk": {
      "properties": {
        "downloadId": {
          "description": "Download ID, which uniquely identifies the APK to download. Should be supplied to `generatedapks.download` method.",
          "type": "string"
        },
        "moduleName": {
          "type": "string",
          "description": "Name of the module that this APK belongs to."
        },
        "splitId": {
          "type": "string",
          "description": "Split ID. Empty for the main split of the base module."
        },
        "variantId": {
          "description": "ID of the generated variant.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object",
      "description": "Download metadata for a split APK.",
      "id": "GeneratedSplitApk"
    },
    "ListUsersResponse": {
      "id": "ListUsersResponse",
      "properties": {
        "nextPageToken": {
          "description": "A token to pass to subsequent calls in order to retrieve subsequent results. This will not be set if there are no more results to return.",
          "type": "string"
        },
        "users": {
          "items": {
            "$ref": "User"
          },
          "type": "array",
          "description": "The resulting users."
        }
      },
      "type": "object",
      "description": "A response containing one or more users with access to an account."
    },
    "DeviceSpec": {
      "properties": {
        "supportedAbis": {
          "description": "Supported ABI architectures in the order of preference. The values should be the string as reported by the platform, e.g. \"armeabi-v7a\", \"x86_64\".",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "supportedLocales": {
          "items": {
            "type": "string"
          },
          "description": "All installed locales represented as BCP-47 strings, e.g. \"en-US\".",
          "type": "array"
        },
        "screenDensity": {
          "format": "uint32",
          "type": "integer",
          "description": "Screen dpi."
        }
      },
      "id": "DeviceSpec",
      "description": "The device spec used to generate a system APK.",
      "type": "object"
    },
    "BatchUpdateSubscriptionOfferStatesRequest": {
      "description": "Request message for BatchUpdateSubscriptionOfferStates.",
      "properties": {
        "requests": {
          "description": "Required. The update request list of up to 100 elements. All requests must update different offers.",
          "type": "array",
          "items": {
            "$ref": "UpdateSubscriptionOfferStateRequest"
          }
        }
      },
      "type": "object",
      "id": "BatchUpdateSubscriptionOfferStatesRequest"
    },
    "Review": {
      "properties": {
        "authorName": {
          "type": "string",
          "description": "The name of the user who wrote the review."
        },
        "comments": {
          "items": {
            "$ref": "Comment"
          },
          "type": "array",
          "description": "A repeated field containing comments for the review."
        },
        "reviewId": {
          "description": "Unique identifier for this review.",
          "type": "string"
        }
      },
      "id": "Review",
      "type": "object",
      "description": "An Android app review."
    },
    "ItemReplacement": {
      "description": "Details about a subscription line item that is being replaced.",
      "type": "object",
      "id": "ItemReplacement",
      "properties": {
        "replacementMode": {
          "type": "string",
          "description": "The replacement mode applied during the purchase.",
          "enumDescriptions": [
            "Unspecified replacement mode.",
            "The new plan will be prorated and credited from the old plan.",
            "The user will be charged a prorated price for the new plan.",
            "The new plan will replace the old one without prorating the time.",
            "The user will be charged the full price for the new plan.",
            "The old plan will be cancelled and the new plan will be effective after the old one expires.",
            "The plan will remain unchanged with this replacement."
          ],
          "enum": [
            "REPLACEMENT_MODE_UNSPECIFIED",
            "WITH_TIME_PRORATION",
            "CHARGE_PRORATED_PRICE",
            "WITHOUT_PRORATION",
            "CHARGE_FULL_PRICE",
            "DEFERRED",
            "KEEP_EXISTING"
          ]
        },
        "offerId": {
          "type": "string",
          "description": "The offer ID of the subscription line item being replaced, if applicable."
        },
        "productId": {
          "description": "The product ID of the subscription line item being replaced.",
          "type": "string"
        },
        "basePlanId": {
          "description": "The base plan ID of the subscription line item being replaced.",
          "type": "string"
        }
      }
    },
    "RevokeSubscriptionPurchaseRequest": {
      "description": "Request for the purchases.subscriptionsv2.revoke API.",
      "id": "RevokeSubscriptionPurchaseRequest",
      "type": "object",
      "properties": {
        "revocationContext": {
          "$ref": "RevocationContext",
          "description": "Required. Additional details around the subscription revocation."
        }
      }
    },
    "RevocationContextItemBasedRefund": {
      "description": "Used to determine what specific item to revoke in a subscription with multiple items.",
      "type": "object",
      "id": "RevocationContextItemBasedRefund",
      "properties": {
        "productId": {
          "description": "Required. If the subscription is a subscription with add-ons, the product id of the subscription item to revoke.",
          "type": "string"
        }
      }
    },
    "Bundle": {
      "type": "object",
      "description": "Information about an app bundle. The resource for BundlesService.",
      "id": "Bundle",
      "properties": {
        "sha256": {
          "type": "string",
          "description": "A sha256 hash of the upload payload, encoded as a hex string and matching the output of the sha256sum command."
        },
        "versionCode": {
          "description": "The version code of the Android App Bundle, as specified in the Android App Bundle's base module APK manifest file.",
          "type": "integer",
          "format": "int32"
        },
        "sha1": {
          "type": "string",
          "description": "A sha1 hash of the upload payload, encoded as a hex string and matching the output of the sha1sum command."
        }
      }
    },
    "ConvertedOtherRegionsPrice": {
      "properties": {
        "usdPrice": {
          "description": "Price in USD to use for the \"Other regions\" location exclusive of taxes.",
          "$ref": "Money"
        },
        "eurPrice": {
          "description": "Price in EUR to use for the \"Other regions\" location exclusive of taxes.",
          "$ref": "Money"
        }
      },
      "type": "object",
      "id": "ConvertedOtherRegionsPrice",
      "description": "Converted other regions prices."
    },
    "RotateAppSigningKeyRequest": {
      "description": "Request to rotate an app's signing key.",
      "type": "object",
      "id": "RotateAppSigningKeyRequest",
      "properties": {
        "keyRotationReason": {
          "enumDescriptions": [
            "Unspecified key rotation reason. Cannot be used.",
            "Key is compromised.",
            "Stronger key is required.",
            "Same key is used for multiple apps.",
            "Routine key upgrade.",
            "Other reason."
          ],
          "enum": [
            "KEY_ROTATION_REASON_UNSPECIFIED",
            "COMPROMISED_KEY",
            "USE_STRONGER_KEY",
            "USE_SAME_KEY_FOR_MULTIPLE_APPS",
            "ROUTINE_KEY_UPGRADE",
            "OTHER"
          ],
          "type": "string",
          "description": "Required. Reason for rotating the app key."
        },
        "rotatedCloudKmsKey": {
          "description": "Required. Self-hosted Cloud KMS key.",
          "$ref": "RotatedCloudKmsKey"
        }
      }
    },
    "AppContactInformation": {
      "description": "Contact information for the app.",
      "id": "AppContactInformation",
      "properties": {
        "contactEmail": {
          "description": "The contact email for this app. Always set.",
          "type": "string"
        },
        "websiteUrl": {
          "type": "string",
          "description": "The contact website url for this app. Optionally provided by the developer."
        },
        "phoneNumber": {
          "type": "string",
          "description": "The contact phone for this app. Optionally provided by the developer."
        }
      },
      "type": "object"
    },
    "AssetModuleMetadata": {
      "id": "AssetModuleMetadata",
      "properties": {
        "name": {
          "type": "string",
          "description": "Module name."
        },
        "deliveryType": {
          "enum": [
            "UNKNOWN_DELIVERY_TYPE",
            "INSTALL_TIME",
            "ON_DEMAND",
            "FAST_FOLLOW"
          ],
          "enumDescriptions": [
            "Unspecified delivery type.",
            "This module will always be downloaded as part of the initial install of the app.",
            "This module is requested on-demand, which means it will not be part of the initial install, and will only be sent when requested by the client.",
            "This module will be downloaded immediately after initial install finishes. The app can be opened before these modules are downloaded."
          ],
          "type": "string",
          "description": "Indicates the delivery type for persistent install."
        }
      },
      "type": "object",
      "description": "Metadata of an asset module."
    },
    "ImageAsset": {
      "properties": {
        "imageUrl": {
          "description": "The URL of the image asset.",
          "type": "string"
        }
      },
      "id": "ImageAsset",
      "type": "object",
      "description": "An image asset."
    },
    "BatchGetOneTimeProductOffersResponse": {
      "description": "Response message for the BatchGetOneTimeProductOffers endpoint.",
      "type": "object",
      "id": "BatchGetOneTimeProductOffersResponse",
      "properties": {
        "oneTimeProductOffers": {
          "description": "The list of requested one-time product offers, in the same order as the request.",
          "items": {
            "$ref": "OneTimeProductOffer"
          },
          "type": "array"
        }
      }
    },
    "DeviceTierSet": {
      "properties": {
        "deviceTiers": {
          "description": "Device tiers belonging to the set.",
          "items": {
            "$ref": "DeviceTier"
          },
          "type": "array"
        }
      },
      "id": "DeviceTierSet",
      "type": "object",
      "description": "A set of device tiers. A tier set determines what variation of app content gets served to a specific device, for device-targeted content. You should assign a priority level to each tier, which determines the ordering by which they are evaluated by Play. See the documentation of DeviceTier.level for more details."
    },
    "OtherRegionsSubscriptionOfferPhasePrices": {
      "id": "OtherRegionsSubscriptionOfferPhasePrices",
      "description": "Pricing information for any new locations Play may launch in.",
      "type": "object",
      "properties": {
        "usdPrice": {
          "$ref": "Money",
          "description": "Required. Price in USD to use for any new locations Play may launch in."
        },
        "eurPrice": {
          "description": "Required. Price in EUR to use for any new locations Play may launch in.",
          "$ref": "Money"
        }
      }
    },
    "SubscriptionPurchasesDeferResponse": {
      "id": "SubscriptionPurchasesDeferResponse",
      "description": "Response for the purchases.subscriptions.defer API.",
      "type": "object",
      "properties": {
        "newExpiryTimeMillis": {
          "type": "string",
          "format": "int64",
          "description": "The new expiry time for the subscription in milliseconds since the Epoch."
        }
      }
    },
    "DeviceTierConfig": {
      "properties": {
        "deviceTierSet": {
          "description": "Definition of the set of device tiers for the app.",
          "$ref": "DeviceTierSet"
        },
        "deviceTierConfigId": {
          "format": "int64",
          "readOnly": true,
          "description": "Output only. The device tier config ID.",
          "type": "string"
        },
        "userCountrySets": {
          "items": {
            "$ref": "UserCountrySet"
          },
          "type": "array",
          "description": "Definition of user country sets for the app."
        },
        "deviceGroups": {
          "description": "Definition of device groups for the app.",
          "items": {
            "$ref": "DeviceGroup"
          },
          "type": "array"
        }
      },
      "type": "object",
      "description": "Configuration describing device targeting criteria for the content of an app.",
      "id": "DeviceTierConfig"
    },
    "LocalizedText": {
      "description": "Localized text in given language.",
      "id": "LocalizedText",
      "type": "object",
      "properties": {
        "text": {
          "description": "The text in the given language.",
          "type": "string"
        },
        "language": {
          "description": "Language localization code (a BCP-47 language tag; for example, \"de-AT\" for Austrian German).",
          "type": "string"
        }
      }
    },
    "ExternalTransactionAddress": {
      "description": "User's address for the external transaction.",
      "id": "ExternalTransactionAddress",
      "properties": {
        "regionCode": {
          "type": "string",
          "description": "Required. Two letter region code based on ISO-3166-1 Alpha-2 (UN region codes)."
        },
        "administrativeArea": {
          "description": "Optional. Top-level administrative subdivision of the country/region. Only required for transactions in India. Valid values are \"ANDAMAN AND NICOBAR ISLANDS\", \"ANDHRA PRADESH\", \"ARUNACHAL PRADESH\", \"ASSAM\", \"BIHAR\", \"CHANDIGARH\", \"CHHATTISGARH\", \"DADRA AND NAGAR HAVELI\", \"DADRA AND NAGAR HAVELI AND DAMAN AND DIU\", \"DAMAN AND DIU\", \"DELHI\", \"GOA\", \"GUJARAT\", \"HARYANA\", \"HIMACHAL PRADESH\", \"JAMMU AND KASHMIR\", \"JHARKHAND\", \"KARNATAKA\", \"KERALA\", \"LADAKH\", \"LAKSHADWEEP\", \"MADHYA PRADESH\", \"MAHARASHTRA\", \"MANIPUR\", \"MEGHALAYA\", \"MIZORAM\", \"NAGALAND\", \"ODISHA\", \"PUDUCHERRY\", \"PUNJAB\", \"RAJASTHAN\", \"SIKKIM\", \"TAMIL NADU\", \"TELANGANA\", \"TRIPURA\", \"UTTAR PRADESH\", \"UTTARAKHAND\", and \"WEST BENGAL\".",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ModuleMetadata": {
      "properties": {
        "name": {
          "description": "Module name.",
          "type": "string"
        },
        "deliveryType": {
          "enumDescriptions": [
            "Unspecified delivery type.",
            "This module will always be downloaded as part of the initial install of the app.",
            "This module is requested on-demand, which means it will not be part of the initial install, and will only be sent when requested by the client.",
            "This module will be downloaded immediately after initial install finishes. The app can be opened before these modules are downloaded."
          ],
          "type": "string",
          "description": "Indicates the delivery type (e.g. on-demand) of the module.",
          "enum": [
            "UNKNOWN_DELIVERY_TYPE",
            "INSTALL_TIME",
            "ON_DEMAND",
            "FAST_FOLLOW"
          ]
        },
        "dependencies": {
          "description": "Names of the modules that this module directly depends on. Each module implicitly depends on the base module.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "targeting": {
          "$ref": "ModuleTargeting",
          "description": "The targeting that makes a conditional module installed. Relevant only for Split APKs."
        },
        "moduleType": {
          "type": "string",
          "description": "Indicates the type of this feature module.",
          "enum": [
            "UNKNOWN_MODULE_TYPE",
            "FEATURE_MODULE"
          ],
          "enumDescriptions": [
            "Unknown feature module.",
            "Regular feature module."
          ]
        }
      },
      "id": "ModuleMetadata",
      "description": "Metadata of a module.",
      "type": "object"
    },
    "BasePlan": {
      "id": "BasePlan",
      "type": "object",
      "properties": {
        "basePlanId": {
          "description": "Required. Immutable. The unique identifier of this base plan. Must be unique within the subscription, and conform with RFC-1034. That is, this ID can only contain lower-case letters (a-z), numbers (0-9), and hyphens (-), and be at most 63 characters.",
          "type": "string"
        },
        "state": {
          "readOnly": true,
          "type": "string",
          "enumDescriptions": [
            "Unspecified state.",
            "The base plan is currently in a draft state, and hasn't been activated. It can be safely deleted at this point.",
            "The base plan is active and available for new subscribers.",
            "The base plan is inactive and only available for existing subscribers."
          ],
          "enum": [
            "STATE_UNSPECIFIED",
            "DRAFT",
            "ACTIVE",
            "INACTIVE"
          ],
          "description": "Output only. The state of the base plan, i.e. whether it's active. Draft and inactive base plans can be activated or deleted. Active base plans can be made inactive. Inactive base plans can be canceled. This field cannot be changed by updating the resource. Use the dedicated endpoints instead."
        },
        "offerTags": {
          "type": "array",
          "description": "List of up to 20 custom tags specified for this base plan, and returned to the app through the billing library. Subscription offers for this base plan will also receive these offer tags in the billing library.",
          "items": {
            "$ref": "OfferTag"
          }
        },
        "otherRegionsConfig": {
          "$ref": "OtherRegionsBasePlanConfig",
          "description": "Pricing information for any new locations Play may launch in the future. If omitted, the BasePlan will not be automatically available any new locations Play may launch in the future."
        },
        "autoRenewingBasePlanType": {
          "$ref": "AutoRenewingBasePlanType",
          "description": "Set when the base plan automatically renews at a regular interval."
        },
        "installmentsBasePlanType": {
          "description": "Set for installments base plans where a user is committed to a specified number of payments.",
          "$ref": "InstallmentsBasePlanType"
        },
        "prepaidBasePlanType": {
          "$ref": "PrepaidBasePlanType",
          "description": "Set when the base plan does not automatically renew at the end of the billing period."
        },
        "regionalConfigs": {
          "items": {
            "$ref": "RegionalBasePlanConfig"
          },
          "description": "Region-specific information for this base plan.",
          "type": "array"
        },
        "transitionTargetConfig": {
          "description": "Transition target base plan information when this base plan has a transition plan.",
          "$ref": "TransitionTargetConfig"
        }
      },
      "description": "A single base plan for a subscription."
    },
    "DeobfuscationFilesUploadResponse": {
      "description": "Responses for the upload.",
      "properties": {
        "deobfuscationFile": {
          "$ref": "DeobfuscationFile",
          "description": "The uploaded Deobfuscation File configuration."
        }
      },
      "type": "object",
      "id": "DeobfuscationFilesUploadResponse"
    },
    "RegionalSubscriptionOfferPhaseFreePriceOverride": {
      "id": "RegionalSubscriptionOfferPhaseFreePriceOverride",
      "description": "Represents the free price override configuration for a single phase of a subscription offer",
      "type": "object",
      "properties": {}
    },
    "DeployAppRecoveryRequest": {
      "type": "object",
      "description": "Request message for DeployAppRecovery.",
      "id": "DeployAppRecoveryRequest",
      "properties": {}
    },
    "IntroductoryPriceDetails": {
      "description": "Details of an introductory price pricing phase.",
      "id": "IntroductoryPriceDetails",
      "properties": {},
      "type": "object"
    },
    "OfferDetails": {
      "properties": {
        "offerId": {
          "type": "string",
          "description": "The offer ID. Only present for discounted offers."
        },
        "offerTags": {
          "description": "The latest offer tags associated with the offer. It includes tags inherited from the base plan.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "basePlanId": {
          "type": "string",
          "description": "The base plan ID. Present for all base plan and offers."
        }
      },
      "id": "OfferDetails",
      "type": "object",
      "description": "Offer details information related to a purchase line item."
    },
    "RentOfferDetails": {
      "description": "Offer details information related to a rental line item.",
      "id": "RentOfferDetails",
      "type": "object",
      "properties": {}
    },
    "CloudKmsKeyAndCert": {
      "description": "Cloud KMS key and the certificate associated with the key.",
      "type": "object",
      "id": "CloudKmsKeyAndCert",
      "properties": {
        "pemCertificate": {
          "description": "Required. Certificate associated with the key. The bytes must contain the certificate in PEM format.",
          "format": "byte",
          "type": "string"
        },
        "cloudKmsKey": {
          "description": "Required. Cloud KMS key.",
          "$ref": "CloudKmsKey"
        }
      }
    },
    "DefiniteTransition": {
      "properties": {},
      "type": "object",
      "description": "Used to indicate that the plan transition is definite.",
      "id": "DefiniteTransition"
    },
    "OneTimeProductRentPurchaseOption": {
      "description": "A purchase option that can be rented.",
      "type": "object",
      "properties": {
        "rentalPeriod": {
          "type": "string",
          "description": "Required. The amount of time a user has the entitlement for. Starts at purchase flow completion. Specified in ISO 8601 format."
        },
        "expirationPeriod": {
          "type": "string",
          "description": "Optional. The amount of time the user has after starting consuming the entitlement before it is revoked. Specified in ISO 8601 format."
        }
      },
      "id": "OneTimeProductRentPurchaseOption"
    },
    "ImagesListResponse": {
      "properties": {
        "images": {
          "type": "array",
          "description": "All listed Images.",
          "items": {
            "$ref": "Image"
          }
        }
      },
      "description": "Response listing all images.",
      "id": "ImagesListResponse",
      "type": "object"
    },
    "ApkTargeting": {
      "properties": {
        "multiAbiTargeting": {
          "$ref": "MultiAbiTargeting",
          "description": "Multi-api-level targeting."
        },
        "sdkVersionTargeting": {
          "description": "The sdk version that the apk targets",
          "$ref": "SdkVersionTargeting"
        },
        "abiTargeting": {
          "$ref": "AbiTargeting",
          "description": "The abi that the apk targets"
        },
        "languageTargeting": {
          "$ref": "LanguageTargeting",
          "description": "The language that the apk targets"
        },
        "textureCompressionFormatTargeting": {
          "description": "Texture-compression-format-level targeting",
          "$ref": "TextureCompressionFormatTargeting"
        },
        "screenDensityTargeting": {
          "description": "The screen density that this apk supports.",
          "$ref": "ScreenDensityTargeting"
        }
      },
      "type": "object",
      "id": "ApkTargeting",
      "description": "Represents a set of apk-level targetings."
    },
    "DeferredItemReplacement": {
      "description": "Information related to deferred item replacement.",
      "id": "DeferredItemReplacement",
      "type": "object",
      "properties": {
        "productId": {
          "description": "The product_id going to replace the existing product_id.",
          "type": "string"
        }
      }
    },
    "UserCountrySet": {
      "description": "A set of user countries. A country set determines what variation of app content gets served to a specific location.",
      "id": "UserCountrySet",
      "properties": {
        "name": {
          "description": "Country set name.",
          "type": "string"
        },
        "countryCodes": {
          "items": {
            "type": "string"
          },
          "description": "List of country codes representing countries. A Country code is represented in ISO 3166 alpha-2 format. For Example:- \"IT\" for Italy, \"GE\" for Georgia.",
          "type": "array"
        }
      },
      "type": "object"
    },
    "AllUsers": {
      "id": "AllUsers",
      "properties": {
        "isAllUsersRequested": {
          "type": "boolean",
          "description": "Required. Set to true if all set of users are needed."
        }
      },
      "description": "Object representation to describe all set of users.",
      "type": "object"
    },
    "SplitApkMetadata": {
      "properties": {
        "splitId": {
          "type": "string",
          "description": "Id of the split."
        },
        "isMasterSplit": {
          "description": "Indicates whether this APK is the main split of the module.",
          "type": "boolean"
        }
      },
      "id": "SplitApkMetadata",
      "type": "object",
      "description": "Holds data specific to Split APKs."
    },
    "DeviceTier": {
      "properties": {
        "deviceGroupNames": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Groups of devices included in this tier. These groups must be defined explicitly under device_groups in this configuration."
        },
        "level": {
          "format": "int32",
          "type": "integer",
          "description": "The priority level of the tier. Tiers are evaluated in descending order of level: the highest level tier has the highest priority. The highest tier matching a given device is selected for that device. You should use a contiguous range of levels for your tiers in a tier set; tier levels in a tier set must be unique. For instance, if your tier set has 4 tiers (including the global fallback), you should define tiers 1, 2 and 3 in this configuration. Note: tier 0 is implicitly defined as a global fallback and selected for devices that don't match any of the tiers explicitly defined here. You mustn't define level 0 explicitly in this configuration."
        }
      },
      "type": "object",
      "description": "A single device tier. Devices matching any of the device groups in device_group_names are considered to match the tier.",
      "id": "DeviceTier"
    },
    "AppStoreAppDetails": {
      "description": "Details about the app.",
      "type": "object",
      "id": "AppStoreAppDetails",
      "properties": {
        "developerWebsite": {
          "description": "Optional. Website link for the developer or app.",
          "type": "string"
        },
        "developerName": {
          "type": "string",
          "description": "Required. The app developer's name."
        },
        "contactEmail": {
          "description": "Required. The app developer's contact email address.",
          "type": "string"
        }
      }
    },
    "ApkSet": {
      "id": "ApkSet",
      "description": "A set of apks representing a module.",
      "properties": {
        "moduleMetadata": {
          "$ref": "ModuleMetadata",
          "description": "Metadata about the module represented by this ApkSet"
        },
        "apkDescription": {
          "description": "Description of the generated apks.",
          "items": {
            "$ref": "ApkDescription"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "BatchDeleteOneTimeProductsRequest": {
      "type": "object",
      "description": "Request message for BatchDeleteOneTimeProduct.",
      "properties": {
        "requests": {
          "type": "array",
          "items": {
            "$ref": "DeleteOneTimeProductRequest"
          },
          "description": "Required. A list of delete requests of up to 100 elements. All requests must delete different one-time products."
        }
      },
      "id": "BatchDeleteOneTimeProductsRequest"
    },
    "CoarseLocation": {
      "type": "object",
      "id": "CoarseLocation",
      "properties": {
        "regionCode": {
          "description": "Required. [CLDR region code](https://cldr.unicode.org/) of the country/region of the address. This value is never inferred and you must ensure the value is correct. Example: \"CH\" for Switzerland.",
          "type": "string"
        },
        "administrativeArea": {
          "description": "Optional. Highest administrative subdivision which is used for postal addresses of a country or region. For example, this can be a state, a province, an oblast, or a prefecture. For Spain, this is the province and not the autonomous community (for example, \"Barcelona\" and not \"Catalonia\"). Many countries don't use an administrative area in postal addresses. For example, in Switzerland, this should be left unpopulated.",
          "type": "string"
        },
        "locality": {
          "description": "Optional. Generally refers to the city or town portion of the address. Examples: US city, IT comune, UK post town. In regions of the world where localities are not well defined or do not fit into this structure well, leave `locality` empty.",
          "type": "string"
        },
        "sublocality": {
          "type": "string",
          "description": "Optional. Sublocality of the address. For example, this can be a neighborhood, borough, or district. For most addresses, you can omit this."
        }
      },
      "description": "Coarse Geographic location details for where the consumption happened."
    },
    "InAppProductListing": {
      "id": "InAppProductListing",
      "type": "object",
      "properties": {
        "title": {
          "type": "string",
          "description": "Title for the store listing."
        },
        "benefits": {
          "description": "Deprecated: Subscriptions are no longer supported in the InAppProducts API. Use the Subscriptions API instead.",
          "deprecated": true,
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "description": {
          "description": "Description for the store listing.",
          "type": "string"
        }
      },
      "description": "Store listing of a single in-app product."
    },
    "TextureCompressionFormatTargeting": {
      "id": "TextureCompressionFormatTargeting",
      "description": "Targeting by a texture compression format.",
      "type": "object",
      "properties": {
        "value": {
          "description": "The list of targeted TCFs. Should not be empty.",
          "type": "array",
          "items": {
            "$ref": "TextureCompressionFormat"
          }
        },
        "alternatives": {
          "type": "array",
          "description": "List of alternative TCFs (TCFs targeted by the sibling splits).",
          "items": {
            "$ref": "TextureCompressionFormat"
          }
        }
      }
    },
    "DeviceRam": {
      "properties": {
        "minBytes": {
          "type": "string",
          "description": "Minimum RAM in bytes (bound included).",
          "format": "int64"
        },
        "maxBytes": {
          "description": "Maximum RAM in bytes (bound excluded).",
          "format": "int64",
          "type": "string"
        }
      },
      "type": "object",
      "id": "DeviceRam",
      "description": "Conditions about a device's RAM capabilities."
    },
    "SocSelector": {
      "description": "Defines a SOC selector for a device. This will match any device whose SoC (System on Chip) matches all fields in the selector.",
      "id": "SocSelector",
      "properties": {
        "socMake": {
          "type": "string",
          "description": "The manufacturer of the SoC."
        },
        "socModel": {
          "description": "The model of the SoC.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "UsesConfiguration": {
      "properties": {
        "requiredKeyboardType": {
          "type": "string",
          "enumDescriptions": [
            "Unspecified keyboard type.",
            "Undefined keyboard type.",
            "No keys keyboard.",
            "Qwerty keyboard.",
            "Twelve key keyboard."
          ],
          "description": "The type of keyboard required.",
          "enum": [
            "KEYBOARD_TYPE_UNSPECIFIED",
            "KEYBOARD_TYPE_UNDEFINED",
            "KEYBOARD_TYPE_NO_KEYS",
            "KEYBOARD_TYPE_QWERTY",
            "KEYBOARD_TYPE_TWELVE_KEY"
          ]
        },
        "requiresHardwareKeyboard": {
          "description": "Whether or not the application requires a hardware keyboard.",
          "type": "boolean"
        },
        "requiresFiveWayNavigation": {
          "description": "Whether or not the application requires a five-way navigation control.",
          "type": "boolean"
        },
        "requiredTouchscreenType": {
          "type": "string",
          "enum": [
            "TOUCHSCREEN_TYPE_UNSPECIFIED",
            "TOUCHSCREEN_TYPE_UNDEFINED",
            "TOUCHSCREEN_TYPE_NO_TOUCHSCREEN",
            "TOUCHSCREEN_TYPE_STYLUS",
            "TOUCHSCREEN_TYPE_FINGER"
          ],
          "enumDescriptions": [
            "Unspecified touchscreen type.",
            "Undefined touchscreen type.",
            "No touchscreen.",
            "Stylus touchscreen.",
            "Finger touchscreen."
          ],
          "description": "The type of touchscreen required."
        },
        "requiredNavigationType": {
          "enum": [
            "NAVIGATION_TYPE_UNSPECIFIED",
            "NAVIGATION_TYPE_UNDEFINED",
            "NAVIGATION_TYPE_NO_NAVIGATION",
            "NAVIGATION_TYPE_DPAD",
            "NAVIGATION_TYPE_TRACKBALL",
            "NAVIGATION_TYPE_WHEEL"
          ],
          "type": "string",
          "description": "The navigation device required.",
          "enumDescriptions": [
            "Unspecified navigation type.",
            "Undefined navigation type.",
            "No navigation.",
            "Dpad navigation.",
            "Trackball navigation.",
            "Wheel navigation."
          ]
        }
      },
      "type": "object",
      "id": "UsesConfiguration",
      "description": "Represents all configurations marked as required by use of the uses-configuration manifest tag."
    },
    "CompatibleScreen": {
      "id": "CompatibleScreen",
      "description": "Compatible screens as listed in the `compatible-screens` Manifest tag.",
      "type": "object",
      "properties": {
        "density": {
          "description": "Screen density.",
          "enumDescriptions": [
            "Unspecified density.",
            "No density.",
            "Low density.",
            "Medium density.",
            "TV density.",
            "High density.",
            "280 dpi.",
            "Extra high density.",
            "360 dpi.",
            "400 dpi.",
            "420 dpi.",
            "Extra extra high density.",
            "560 dpi.",
            "Extra extra extra high density."
          ],
          "type": "string",
          "enum": [
            "DENSITY_UNSPECIFIED",
            "DENSITY_NODPI",
            "DENSITY_LDPI",
            "DENSITY_MDPI",
            "DENSITY_TVDPI",
            "DENSITY_HDPI",
            "DENSITY_280",
            "DENSITY_XHDPI",
            "DENSITY_360",
            "DENSITY_400",
            "DENSITY_420",
            "DENSITY_XXHDPI",
            "DENSITY_560",
            "DENSITY_XXXHDPI"
          ]
        },
        "screenSize": {
          "enumDescriptions": [
            "Unspecified screen size.",
            "Small screen size.",
            "Normal screen size.",
            "Large screen size.",
            "Extra large screen size."
          ],
          "enum": [
            "SCREEN_SIZE_UNSPECIFIED",
            "SCREEN_SIZE_SMALL",
            "SCREEN_SIZE_NORMAL",
            "SCREEN_SIZE_LARGE",
            "SCREEN_SIZE_EXTRA_LARGE"
          ],
          "description": "The screen size.",
          "type": "string"
        }
      }
    },
    "BatchUpdatePurchaseOptionStatesResponse": {
      "id": "BatchUpdatePurchaseOptionStatesResponse",
      "description": "Response message for BatchUpdatePurchaseOptionStates.",
      "properties": {
        "oneTimeProducts": {
          "items": {
            "$ref": "OneTimeProduct"
          },
          "type": "array",
          "description": "The list of updated one-time products. This list will match the requests one to one, in the same order."
        }
      },
      "type": "object"
    },
    "OneTimeProductPurchaseOption": {
      "properties": {
        "purchaseOptionId": {
          "description": "Required. Immutable. The unique identifier of this purchase option. Must be unique within the one-time product. It must start with a number or lower-case letter, and can only contain lower-case letters (a-z), numbers (0-9), and hyphens (-). The maximum length is 63 characters.",
          "type": "string"
        },
        "offerTags": {
          "type": "array",
          "description": "Optional. List of up to 20 custom tags specified for this purchase option, and returned to the app through the billing library. Offers for this purchase option will also receive these tags in the billing library.",
          "items": {
            "$ref": "OfferTag"
          }
        },
        "buyOption": {
          "$ref": "OneTimeProductBuyPurchaseOption",
          "description": "A purchase option that can be bought."
        },
        "regionalPricingAndAvailabilityConfigs": {
          "type": "array",
          "items": {
            "$ref": "OneTimeProductPurchaseOptionRegionalPricingAndAvailabilityConfig"
          },
          "description": "Regional pricing and availability information for this purchase option."
        },
        "state": {
          "enum": [
            "STATE_UNSPECIFIED",
            "DRAFT",
            "ACTIVE",
            "INACTIVE",
            "INACTIVE_PUBLISHED"
          ],
          "enumDescriptions": [
            "Default value, should never be used.",
            "The purchase option is not and has never been available to users.",
            "The purchase option is available to users.",
            "The purchase option is not available to users anymore.",
            "The purchase option is not available for purchase anymore, but we continue to expose its offer via the Play Billing Library for backwards compatibility. Only automatically migrated purchase options can be in this state."
          ],
          "type": "string",
          "readOnly": true,
          "description": "Output only. The state of the purchase option, i.e., whether it's active. This field cannot be changed by updating the resource. Use the dedicated endpoints instead."
        },
        "rentOption": {
          "description": "A purchase option that can be rented.",
          "$ref": "OneTimeProductRentPurchaseOption"
        },
        "taxAndComplianceSettings": {
          "$ref": "PurchaseOptionTaxAndComplianceSettings",
          "description": "Optional. Details about taxes and legal compliance."
        },
        "newRegionsConfig": {
          "description": "Pricing information for any new locations Play may launch in the future. If omitted, the purchase option will not be automatically available in any new locations Play may launch in the future.",
          "$ref": "OneTimeProductPurchaseOptionNewRegionsConfig"
        }
      },
      "id": "OneTimeProductPurchaseOption",
      "type": "object",
      "description": "A single purchase option for a one-time product."
    },
    "ItemExpiryTimeDetails": {
      "id": "ItemExpiryTimeDetails",
      "type": "object",
      "description": "Expiry time details of a subscription item.",
      "properties": {
        "productId": {
          "description": "The product ID of the subscription item (for example, 'premium_plan').",
          "type": "string"
        },
        "expiryTime": {
          "description": "The new expiry time for this subscription item.",
          "format": "google-datetime",
          "type": "string"
        }
      }
    },
    "SystemOnChip": {
      "id": "SystemOnChip",
      "properties": {
        "manufacturer": {
          "type": "string",
          "description": "Required. The designer of the SoC, eg. \"Google\" Value of build property \"ro.soc.manufacturer\" https://developer.android.com/reference/android/os/Build#SOC_MANUFACTURER Required."
        },
        "model": {
          "description": "Required. The model of the SoC, eg. \"Tensor\" Value of build property \"ro.soc.model\" https://developer.android.com/reference/android/os/Build#SOC_MODEL Required.",
          "type": "string"
        }
      },
      "type": "object",
      "description": "Representation of a System-on-Chip (SoC) of an Android device. Can be used to target S+ devices."
    },
    "CancellationEvent": {
      "description": "Details of when the order was canceled.",
      "id": "CancellationEvent",
      "properties": {
        "eventTime": {
          "type": "string",
          "format": "google-datetime",
          "description": "The time when the order was canceled."
        }
      },
      "type": "object"
    },
    "TrackTargetedCountry": {
      "description": "Representation of a single country where the contents of a track can be made available.",
      "id": "TrackTargetedCountry",
      "properties": {
        "countryCode": {
          "description": "The country that can be targeted, as a two-letter CLDR code.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "InappproductsBatchUpdateRequest": {
      "id": "InappproductsBatchUpdateRequest",
      "description": "Request to update or insert one or more in-app products.",
      "properties": {
        "requests": {
          "items": {
            "$ref": "InappproductsUpdateRequest"
          },
          "type": "array",
          "description": "Required. Individual update requests. At least one request is required. Can contain up to 100 requests. All requests must correspond to different in-app products."
        }
      },
      "type": "object"
    },
    "OneTimeExternalTransaction": {
      "id": "OneTimeExternalTransaction",
      "description": "Represents a one-time transaction.",
      "type": "object",
      "properties": {
        "externalTransactionToken": {
          "description": "Input only. Provided during the call to Create. Retrieved from the client when the alternative billing flow is launched.",
          "type": "string"
        }
      }
    },
    "SubscribeWithGoogleInfo": {
      "description": "Information associated with purchases made with 'Subscribe with Google'.",
      "properties": {
        "givenName": {
          "type": "string",
          "description": "The given name of the user when the subscription was purchased."
        },
        "profileName": {
          "type": "string",
          "description": "The profile name of the user when the subscription was purchased."
        },
        "profileId": {
          "type": "string",
          "description": "The Google profile id of the user when the subscription was purchased."
        },
        "emailAddress": {
          "type": "string",
          "description": "The email address of the user when the subscription was purchased."
        },
        "familyName": {
          "type": "string",
          "description": "The family name of the user when the subscription was purchased."
        }
      },
      "id": "SubscribeWithGoogleInfo",
      "type": "object"
    },
    "CreateAppStoreHostedAppResponse": {
      "description": "Response for creating a new app record for an app store hosted app.",
      "type": "object",
      "properties": {},
      "id": "CreateAppStoreHostedAppResponse"
    },
    "ModuleTargeting": {
      "type": "object",
      "id": "ModuleTargeting",
      "description": "Targeting on the module level.",
      "properties": {
        "sdkVersionTargeting": {
          "description": "The sdk version that the variant targets",
          "$ref": "SdkVersionTargeting"
        },
        "userCountriesTargeting": {
          "description": "Countries-level targeting",
          "$ref": "UserCountriesTargeting"
        },
        "deviceFeatureTargeting": {
          "type": "array",
          "description": "Targeting for device features.",
          "items": {
            "$ref": "DeviceFeatureTargeting"
          }
        }
      }
    },
    "OrderDetails": {
      "properties": {
        "taxInclusive": {
          "description": "Indicates whether the listed price was tax inclusive or not.",
          "type": "boolean"
        }
      },
      "id": "OrderDetails",
      "type": "object",
      "description": "Detailed information about the order at creation time."
    },
    "RecentAppView": {
      "id": "RecentAppView",
      "description": "Metadata about a recently updated app.",
      "properties": {
        "appView": {
          "description": "Recently updated app view.",
          "$ref": "CatalogAppView"
        }
      },
      "type": "object"
    },
    "BatchUpdateSubscriptionOfferStatesResponse": {
      "description": "Response message for BatchUpdateSubscriptionOfferStates.",
      "id": "BatchUpdateSubscriptionOfferStatesResponse",
      "properties": {
        "subscriptionOffers": {
          "type": "array",
          "items": {
            "$ref": "SubscriptionOffer"
          },
          "description": "The updated subscription offers list."
        }
      },
      "type": "object"
    },
    "TransitionTargetConfig": {
      "type": "object",
      "description": "Configuration for a transition target base plan.",
      "properties": {
        "productId": {
          "description": "Required. The ID of the parent subscription this transition target base plan belongs to.",
          "type": "string"
        },
        "basePlanId": {
          "description": "Required. The ID of the transition target base plan.",
          "type": "string"
        }
      },
      "id": "TransitionTargetConfig"
    },
    "ConsumptionUsageEvent": {
      "id": "ConsumptionUsageEvent",
      "description": "List of events, each representing an instance where the user consumed or used the purchased item or service.",
      "properties": {
        "location": {
          "description": "Optional. Geographic location where the consumption occurred.",
          "$ref": "CoarseLocation"
        },
        "obfuscatedAccountId": {
          "type": "string",
          "description": "Optional. Obfuscated string that is uniquely associated with the purchaser's user account in the app. https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setObfuscatedAccountId(java.lang.String)"
        },
        "consumptionTime": {
          "description": "Optional. Time when the user consumed, used, downloaded, opened, or streamed the content.",
          "type": "string",
          "format": "google-datetime"
        },
        "obfuscatedProfileId": {
          "description": "Optional. Obfuscated string that is uniquely associated with the purchaser's user profile in the app. https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setObfuscatedProfileId(java.lang.String)",
          "type": "string"
        },
        "ipAddress": {
          "description": "Optional. The IP address from which the consumption occurred.",
          "type": "string"
        },
        "consumptionItemDescription": {
          "description": "Optional. Free form text that allows developers to provide more info on the item consumed. Maximum length is 5000 characters.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ExpansionFile": {
      "description": "An expansion file. The resource for ExpansionFilesService.",
      "properties": {
        "fileSize": {
          "type": "string",
          "format": "int64",
          "description": "If set, this field indicates that this APK has an expansion file uploaded to it: this APK does not reference another APK's expansion file. The field's value is the size of the uploaded expansion file in bytes."
        },
        "referencesVersion": {
          "type": "integer",
          "description": "If set, this APK's expansion file references another APK's expansion file. The file_size field will not be set.",
          "format": "int32"
        }
      },
      "type": "object",
      "id": "ExpansionFile"
    },
    "AppStoreAppActiveApks": {
      "description": "Information about active APKs of an app store hosted app.",
      "type": "object",
      "properties": {
        "activeApkSets": {
          "items": {
            "$ref": "AppStoreAppActiveApkSet"
          },
          "type": "array",
          "description": "Required. List specifying which APK sets are distributed together. This list should contain all APKs that you're distributing for this app. Add an entry for each individual installable set of APKs."
        }
      },
      "id": "AppStoreAppActiveApks"
    },
    "OneTimePurchaseDetails": {
      "description": "Details of a one-time purchase.",
      "type": "object",
      "id": "OneTimePurchaseDetails",
      "properties": {
        "purchaseOptionId": {
          "description": "ID of the purchase option. This field is set for both purchase options and variant offers. For purchase options, this ID identifies the purchase option itself. For variant offers, this ID refers to the associated purchase option, and in conjunction with offer_id it identifies the variant offer.",
          "type": "string"
        },
        "preorderDetails": {
          "description": "The details of a pre-order purchase. Only set if it is a pre-order purchase. Note that this field will be set even after pre-order is fulfilled.",
          "$ref": "PreorderDetails"
        },
        "quantity": {
          "format": "int32",
          "description": "The number of items purchased (for multi-quantity item purchases).",
          "type": "integer"
        },
        "rentalDetails": {
          "$ref": "RentalDetails",
          "description": "The details of a rent purchase. Only set if it is a rent purchase."
        },
        "offerId": {
          "type": "string",
          "description": "The offer ID of the one-time purchase offer."
        }
      }
    },
    "Price": {
      "description": "Definition of a price, i.e. currency and units.",
      "properties": {
        "priceMicros": {
          "description": "Price in 1/million of the currency base unit, represented as a string.",
          "type": "string"
        },
        "currency": {
          "description": "3 letter Currency code, as defined by ISO 4217. See java/com/google/common/money/CurrencyCode.java",
          "type": "string"
        }
      },
      "id": "Price",
      "type": "object"
    },
    "BatchGetOneTimeProductsResponse": {
      "description": "Response message for the BatchGetOneTimeProducts endpoint.",
      "type": "object",
      "id": "BatchGetOneTimeProductsResponse",
      "properties": {
        "oneTimeProducts": {
          "items": {
            "$ref": "OneTimeProduct"
          },
          "type": "array",
          "description": "The list of requested one-time products, in the same order as the request."
        }
      }
    },
    "BatchUpdateSubscriptionsRequest": {
      "description": "Request message for BatchUpdateSubscription.",
      "type": "object",
      "id": "BatchUpdateSubscriptionsRequest",
      "properties": {
        "requests": {
          "description": "Required. A list of update requests of up to 100 elements. All requests must update different subscriptions.",
          "type": "array",
          "items": {
            "$ref": "UpdateSubscriptionRequest"
          }
        }
      }
    },
    "RevocationContextFullRefund": {
      "description": "Used to determine if the refund type in the RevocationContext is a full refund.",
      "id": "RevocationContextFullRefund",
      "type": "object",
      "properties": {}
    },
    "Listing": {
      "properties": {
        "language": {
          "description": "Language localization code (a BCP-47 language tag; for example, \"de-AT\" for Austrian German).",
          "type": "string"
        },
        "video": {
          "description": "URL of a promotional YouTube video for the app.",
          "type": "string"
        },
        "fullDescription": {
          "description": "Full description of the app.",
          "type": "string"
        },
        "title": {
          "type": "string",
          "description": "Localized title of the app."
        },
        "shortDescription": {
          "type": "string",
          "description": "Short description of the app."
        }
      },
      "id": "Listing",
      "type": "object",
      "description": "A localized store listing. The resource for ListingsService."
    },
    "MigrateBasePlanPricesResponse": {
      "type": "object",
      "description": "Response message for MigrateBasePlanPrices.",
      "properties": {},
      "id": "MigrateBasePlanPricesResponse"
    },
    "ListDeviceTierConfigsResponse": {
      "properties": {
        "nextPageToken": {
          "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.",
          "type": "string"
        },
        "deviceTierConfigs": {
          "items": {
            "$ref": "DeviceTierConfig"
          },
          "description": "Device tier configs created by the developer.",
          "type": "array"
        }
      },
      "type": "object",
      "description": "Response listing existing device tier configs.",
      "id": "ListDeviceTierConfigsResponse"
    },
    "ExternalContentLinkDetails": {
      "properties": {
        "linkType": {
          "type": "string",
          "description": "Required. The type content being reported by this transaction.",
          "enum": [
            "EXTERNAL_CONTENT_LINK_TYPE_UNSPECIFIED",
            "LINK_TO_DIGITAL_CONTENT_OFFER",
            "LINK_TO_APP_DOWNLOAD"
          ],
          "enumDescriptions": [
            "Unspecified, do not use.",
            "An offer to purchase digital content.",
            "An app install."
          ]
        },
        "installedAppPackage": {
          "description": "Optional. The package name of the app downloaded through this transaction. Only required for app installs.",
          "type": "string"
        },
        "externalAppCategory": {
          "description": "Optional. The category of the downlaoded app. This must match the category provided in Play Console during the external app verification process. Only required for app installs.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified, do not use.",
            "The app is classified under the app category.",
            "The app is classified under the game category."
          ],
          "enum": [
            "EXTERNAL_CONTENT_APP_CATEGORY_UNSPECIFIED",
            "APP",
            "GAME"
          ]
        }
      },
      "description": "Reporting details unique to the external content link program.",
      "type": "object",
      "id": "ExternalContentLinkDetails"
    },
    "ReviewReplyResult": {
      "description": "The result of replying/updating a reply to review.",
      "properties": {
        "replyText": {
          "description": "The reply text that was applied.",
          "type": "string"
        },
        "lastEdited": {
          "description": "The time at which the reply took effect.",
          "$ref": "Timestamp"
        }
      },
      "id": "ReviewReplyResult",
      "type": "object"
    },
    "UpdateOneTimeProductOfferStateRequest": {
      "description": "Request message to update the state of a one-time product offer.",
      "id": "UpdateOneTimeProductOfferStateRequest",
      "type": "object",
      "properties": {
        "deactivateOneTimeProductOfferRequest": {
          "description": "Deactivates an offer. Once deactivated, the offer is no longer available to users. This state transition is specific to discounted and game reward offers.",
          "$ref": "DeactivateOneTimeProductOfferRequest"
        },
        "cancelOneTimeProductOfferRequest": {
          "description": "Cancels an offer. Once cancelled, the offer is not available to users. Any pending orders related to this offer will be cancelled. This state transition is specific to pre-orders.",
          "$ref": "CancelOneTimeProductOfferRequest"
        },
        "activateOneTimeProductOfferRequest": {
          "description": "Activates an offer. Once activated, the offer is available to users, as long as its conditions are met.",
          "$ref": "ActivateOneTimeProductOfferRequest"
        }
      }
    },
    "BatchGetSubscriptionOffersRequest": {
      "description": "Request message for BatchGetSubscriptionOffers endpoint.",
      "properties": {
        "requests": {
          "type": "array",
          "items": {
            "$ref": "GetSubscriptionOfferRequest"
          },
          "description": "Required. A list of update requests of up to 100 elements. All requests must update different subscriptions."
        }
      },
      "type": "object",
      "id": "BatchGetSubscriptionOffersRequest"
    },
    "BatchUpdateOneTimeProductOffersResponse": {
      "properties": {
        "oneTimeProductOffers": {
          "description": "The list of updated one-time product offers, in the same order as the request.",
          "type": "array",
          "items": {
            "$ref": "OneTimeProductOffer"
          }
        }
      },
      "type": "object",
      "description": "Response message for BatchUpdateOneTimeProductOffers.",
      "id": "BatchUpdateOneTimeProductOffersResponse"
    },
    "Targeting": {
      "properties": {
        "versionList": {
          "description": "Target version codes as a list.",
          "$ref": "AppVersionList"
        },
        "versionRange": {
          "$ref": "AppVersionRange",
          "description": "Target version codes as a range."
        },
        "regions": {
          "$ref": "Regions",
          "description": "Targeting is based on the user account region."
        },
        "androidSdks": {
          "description": "Targeting is based on android api levels of devices.",
          "$ref": "AndroidSdks"
        },
        "allUsers": {
          "description": "All users are targeted.",
          "$ref": "AllUsers"
        }
      },
      "id": "Targeting",
      "type": "object",
      "description": "Targeting details for a recovery action such as regions, android sdk levels, app versions etc."
    },
    "EnrollExistingApp": {
      "description": "Enroll an existing app into Play signing.",
      "id": "EnrollExistingApp",
      "type": "object",
      "properties": {
        "cloudKmsKey": {
          "$ref": "CloudKmsKey",
          "description": "Required. Self-hosted key. Once enrolled, this key will be used to sign your app."
        }
      }
    },
    "PolicyStringResponse": {
      "description": "Any response best encoded as a string. Includes URLs and multiline text fields.",
      "type": "object",
      "id": "PolicyStringResponse",
      "properties": {
        "value": {
          "description": "Required. Provided string value.",
          "type": "string"
        }
      }
    },
    "BatchGetSubscriptionOffersResponse": {
      "description": "Response message for BatchGetSubscriptionOffers endpoint.",
      "properties": {
        "subscriptionOffers": {
          "type": "array",
          "items": {
            "$ref": "SubscriptionOffer"
          }
        }
      },
      "type": "object",
      "id": "BatchGetSubscriptionOffersResponse"
    },
    "CatalogDeviceSelector": {
      "description": "Defines a device selector for a device. A device is considered matched if it matches any of given the selectors.",
      "properties": {
        "ramSelector": {
          "description": "Defines a RAM selector for a device.",
          "$ref": "RamSelector"
        },
        "socSelectors": {
          "description": "The SOC selectors. A device matches the device selector if it matches any of the SOC selectors.",
          "type": "array",
          "items": {
            "$ref": "SocSelector"
          }
        },
        "deviceTypeSelector": {
          "type": "string",
          "description": "The device type selector.",
          "enum": [
            "DEVICE_TYPE_SELECTOR_UNSPECIFIED",
            "ANDROID_GO"
          ],
          "enumDescriptions": [
            "Unspecified device type selector.",
            "Android Go device type."
          ]
        }
      },
      "type": "object",
      "id": "CatalogDeviceSelector"
    },
    "RefundDetails": {
      "properties": {
        "tax": {
          "description": "The amount of tax refunded.",
          "$ref": "Money"
        },
        "total": {
          "description": "The total amount refunded, including tax.",
          "$ref": "Money"
        }
      },
      "type": "object",
      "description": "Details for a partial or full refund.",
      "id": "RefundDetails"
    },
    "PolicyDocumentResponse": {
      "type": "object",
      "description": "An uploaded document. Must be a single logical document (e.g. a financial license).",
      "properties": {
        "documentId": {
          "description": "Required. ID of the uploaded document.",
          "type": "string"
        },
        "expiryDate": {
          "$ref": "Date",
          "description": "Optional. Expiry date for the document."
        },
        "nonExpiring": {
          "type": "boolean",
          "description": "Optional. True if confirmed that the document does not have an expiry date."
        }
      },
      "id": "PolicyDocumentResponse"
    },
    "Date": {
      "description": "Represents a whole or partial calendar date, such as a birthday. The time of day and time zone are either specified elsewhere or are insignificant. The date is relative to the Gregorian Calendar. This can represent one of the following: * A full date, with non-zero year, month, and day values. * A month and day, with a zero year (for example, an anniversary). * A year on its own, with a zero month and a zero day. * A year and month, with a zero day (for example, a credit card expiration date). Related types: * google.type.TimeOfDay * google.type.DateTime * google.protobuf.Timestamp",
      "type": "object",
      "properties": {
        "year": {
          "type": "integer",
          "description": "Year of the date. Must be from 1 to 9999, or 0 to specify a date without a year.",
          "format": "int32"
        },
        "day": {
          "type": "integer",
          "format": "int32",
          "description": "Day of a month. Must be from 1 to 31 and valid for the year and month, or 0 to specify a year by itself or a year and month where the day isn't significant."
        },
        "month": {
          "type": "integer",
          "description": "Month of a year. Must be from 1 to 12, or 0 to specify a year without a month and day.",
          "format": "int32"
        }
      },
      "id": "Date"
    },
    "Regions": {
      "id": "Regions",
      "description": "Region targeting data for app recovery action targeting.",
      "type": "object",
      "properties": {
        "regionCode": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "Regions targeted by the recovery action. Region codes are ISO 3166 Alpha-2 country codes. For example, US stands for United States of America. See https://www.iso.org/iso-3166-country-codes.html for the complete list of country codes."
        }
      }
    },
    "CatalogSdkVersion": {
      "properties": {
        "targetSdkVersion": {
          "format": "int64",
          "type": "string",
          "description": "The target SDK version for the app."
        },
        "minSdkVersion": {
          "description": "The minimum SDK version required for the app (inclusive).",
          "format": "int64",
          "type": "string"
        },
        "maxSdkVersion": {
          "description": "The maximum SDK version required for the app (inclusive).",
          "type": "string",
          "format": "int64"
        }
      },
      "id": "CatalogSdkVersion",
      "description": "Defines a range of SDK versions. A device is considered compatible uf its\\ SDK version falls within the min_sdk_version and max_sdk_version range.",
      "type": "object"
    },
    "AutoRenewingPlan": {
      "properties": {
        "installmentDetails": {
          "$ref": "InstallmentPlan",
          "description": "The installment plan commitment and state related info for the auto renewing plan."
        },
        "recurringPrice": {
          "$ref": "Money",
          "description": "The current recurring price of the auto renewing plan. Note that the price does not take into account discounts and does not include taxes. For tax-exclusive pricing, please call orders.get API instead if transaction details are needed."
        },
        "priceStepUpConsentDetails": {
          "description": "The information of the latest price step-up consent.",
          "$ref": "PriceStepUpConsentDetails"
        },
        "planTransitionDetails": {
          "description": "The information of the associated plan transition. Will be present only if this plan has a transition plan associated with it and will only include the latest transition details associated with the item.",
          "$ref": "PlanTransitionDetails"
        },
        "autoRenewEnabled": {
          "type": "boolean",
          "description": "If the subscription is currently set to auto-renew, e.g. the user has not canceled the subscription"
        },
        "priceChangeDetails": {
          "description": "The information of the last price change for the item since subscription signup.",
          "$ref": "SubscriptionItemPriceChangeDetails"
        }
      },
      "id": "AutoRenewingPlan",
      "type": "object",
      "description": "Information related to an auto renewing plan."
    },
    "AppStoreAppActiveApkSet": {
      "properties": {
        "alreadyPublishedOnPlay": {
          "description": "Optional. Whether all APKs referenced in this active APK set are published on Play Store (or derived from an app bundle published on Play Store). When this is set, version_code must be provided.",
          "type": "boolean"
        },
        "splitApkId": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Optional. IDs for split modules that might be installed in combination with the base APK. Can be empty if app bundles (or a similar technology) are not used. Example: config.en.apk."
        },
        "versionCode": {
          "description": "Optional. Version code for the version this APK set represents.",
          "format": "int64",
          "type": "string"
        },
        "baseApkId": {
          "description": "Required. The ID for the main base application module. Example: base.apk or app.apk.",
          "type": "string"
        }
      },
      "description": "An installable set of active APKs. All APKs in this set should belong to the same version of the app. A set of APKs might only contain 1 APK if the app in question publishes using APKs. If the app uses app bundles (or a similar technology), this set should contain all APKs (even optional ones) that might be installed for this app. A set of APKs should be installable together. If certain APKs are exclusive to one another and cannot be installed together, then a separate AppStoreAppActiveApkSet should be created.",
      "type": "object",
      "id": "AppStoreAppActiveApkSet"
    },
    "BatchMigrateBasePlanPricesResponse": {
      "properties": {
        "responses": {
          "type": "array",
          "items": {
            "$ref": "MigrateBasePlanPricesResponse"
          },
          "description": "Contains one response per requested price migration, in the same order as the request."
        }
      },
      "id": "BatchMigrateBasePlanPricesResponse",
      "description": "Response message for BatchMigrateBasePlanPrices.",
      "type": "object"
    },
    "OneTimeProductPurchaseOptionNewRegionsConfig": {
      "type": "object",
      "properties": {
        "usdPrice": {
          "description": "Required. Price in USD to use for any new regions Play may launch in.",
          "$ref": "Money"
        },
        "availability": {
          "enumDescriptions": [
            "Unspecified availability. Must not be used.",
            "The config will be used for any new regions Play may launch in the future.",
            "The config is not available anymore and will not be used for any new regions Play may launch in the future. This value can only be used if the availability was previously set as AVAILABLE."
          ],
          "description": "Required. The regional availability for the new regions config. When set to AVAILABLE, the pricing information will be used for any new regions Play may launch in the future.",
          "type": "string",
          "enum": [
            "AVAILABILITY_UNSPECIFIED",
            "AVAILABLE",
            "NO_LONGER_AVAILABLE"
          ]
        },
        "eurPrice": {
          "description": "Required. Price in EUR to use for any new regions Play may launch in.",
          "$ref": "Money"
        }
      },
      "id": "OneTimeProductPurchaseOptionNewRegionsConfig",
      "description": "Pricing information for any new regions Play may launch in the future."
    },
    "DeveloperDetails": {
      "type": "object",
      "description": "The developer details of a Google Play app.",
      "properties": {
        "website": {
          "type": "string",
          "description": "The website of the developer."
        },
        "contactEmail": {
          "description": "The contact email of the developer.",
          "type": "string"
        },
        "developerName": {
          "type": "string",
          "description": "The developer name of the app."
        },
        "address": {
          "description": "The physical address of the developer.",
          "type": "string"
        },
        "phoneNumber": {
          "description": "The phone number of the developer.",
          "type": "string"
        }
      },
      "id": "DeveloperDetails"
    },
    "CancellationContext": {
      "description": "Cancellation context of the purchases.subscriptionsv2.cancel API.",
      "properties": {
        "cancellationType": {
          "enum": [
            "CANCELLATION_TYPE_UNSPECIFIED",
            "USER_REQUESTED_STOP_RENEWALS",
            "DEVELOPER_REQUESTED_STOP_PAYMENTS"
          ],
          "enumDescriptions": [
            "Cancellation type unspecified.",
            "Cancellation requested by the user, and the subscription can be restored. It only stops the subscription's next renewal. For an installment subscription, users still need to finish the commitment period. For more details on renewals and payments, see https://developer.android.com/google/play/billing/subscriptions#installments",
            "Cancellation requested by the developer, and the subscription cannot be restored. It stops the subscription's next payment. For an installment subscription, users will not need to pay the next payment and finish the commitment period. For more details on renewals and payments, see https://developer.android.com/google/play/billing/subscriptions#installments"
          ],
          "type": "string",
          "description": "Required. The type of cancellation for the purchased subscription."
        }
      },
      "id": "CancellationContext",
      "type": "object"
    },
    "OtherRegionsBasePlanConfig": {
      "id": "OtherRegionsBasePlanConfig",
      "description": "Pricing information for any new locations Play may launch in.",
      "properties": {
        "eurPrice": {
          "description": "Required. Price in EUR to use for any new locations Play may launch in.",
          "$ref": "Money"
        },
        "newSubscriberAvailability": {
          "type": "boolean",
          "description": "Whether the base plan is available for new subscribers in any new locations Play may launch in. If not specified, this will default to false."
        },
        "usdPrice": {
          "description": "Required. Price in USD to use for any new locations Play may launch in.",
          "$ref": "Money"
        }
      },
      "type": "object"
    },
    "InappproductsBatchGetResponse": {
      "id": "InappproductsBatchGetResponse",
      "properties": {
        "inappproduct": {
          "description": "The list of requested in-app products, in the same order as the request.",
          "type": "array",
          "items": {
            "$ref": "InAppProduct"
          }
        }
      },
      "description": "Response message for BatchGetSubscriptions endpoint.",
      "type": "object"
    },
    "BatchGetSubscriptionsResponse": {
      "description": "Response message for BatchGetSubscriptions endpoint.",
      "properties": {
        "subscriptions": {
          "items": {
            "$ref": "Subscription"
          },
          "type": "array",
          "description": "The list of requested subscriptions, in the same order as the request."
        }
      },
      "id": "BatchGetSubscriptionsResponse",
      "type": "object"
    },
    "ReleaseSummary": {
      "properties": {
        "releaseLifecycleState": {
          "enum": [
            "RELEASE_LIFECYCLE_STATE_UNSPECIFIED",
            "RELEASE_LIFECYCLE_STATE_DRAFT",
            "RELEASE_LIFECYCLE_STATE_NOT_SENT_FOR_REVIEW",
            "RELEASE_LIFECYCLE_STATE_IN_REVIEW",
            "RELEASE_LIFECYCLE_STATE_APPROVED_NOT_PUBLISHED",
            "RELEASE_LIFECYCLE_STATE_NOT_APPROVED",
            "RELEASE_LIFECYCLE_STATE_PUBLISHED"
          ],
          "type": "string",
          "enumDescriptions": [
            "Not specified.",
            "The release is not yet ready and can still be edited.",
            "The release is ready to be sent for review and an action is required from developer",
            "Submitted and in review",
            "Passed review and is ready to be published manually by developer",
            "App was rejected in review",
            "Available to users on the track. This includes fully- or partially-rolled out releases and any halted release that can be resumed."
          ],
          "description": "The lifecycle state of a release."
        },
        "track": {
          "description": "Identifier for the track. [Learn more about track names.](https://developers.google.com/android-publisher/tracks).",
          "type": "string"
        },
        "activeArtifacts": {
          "items": {
            "$ref": "ArtifactSummary"
          },
          "description": "List of active artifacts on this release",
          "type": "array"
        },
        "releaseName": {
          "type": "string",
          "description": "Name of the release."
        }
      },
      "type": "object",
      "description": "Summary of a release.",
      "id": "ReleaseSummary"
    },
    "CancelAppRecoveryRequest": {
      "description": "Request message for CancelAppRecovery.",
      "type": "object",
      "properties": {},
      "id": "CancelAppRecoveryRequest"
    },
    "RotatedCloudKmsKey": {
      "id": "RotatedCloudKmsKey",
      "description": "Message representing rotated Cloud KMS key. Consists of the Cloud KMS key and its associated proof of rotation.",
      "type": "object",
      "properties": {
        "signingCertificateLineage": {
          "format": "byte",
          "description": "Required. Proof-of-rotation. See [creating signing certificate lineages](https://developer.android.com/studio/command-line/apksigner#rotate_signing_keys_2).",
          "type": "string"
        },
        "cloudKmsKeyAndCert": {
          "$ref": "CloudKmsKeyAndCert",
          "description": "Required. Cloud KMS key and the certificate associated with the key."
        }
      }
    },
    "SystemApkOptions": {
      "type": "object",
      "id": "SystemApkOptions",
      "properties": {
        "uncompressedNativeLibraries": {
          "description": "Whether system APK was generated with uncompressed native libraries.",
          "type": "boolean"
        },
        "uncompressedDexFiles": {
          "type": "boolean",
          "description": "Whether system APK was generated with uncompressed dex files."
        },
        "rotated": {
          "description": "Whether to use the rotated key for signing the system APK.",
          "type": "boolean"
        }
      },
      "description": "Options for system APKs."
    },
    "BaseDetails": {
      "id": "BaseDetails",
      "description": "Details of a base price pricing phase.",
      "type": "object",
      "properties": {}
    },
    "BatchUpdateOneTimeProductsRequest": {
      "description": "Request message for BatchUpdateOneTimeProduct.",
      "id": "BatchUpdateOneTimeProductsRequest",
      "properties": {
        "requests": {
          "type": "array",
          "items": {
            "$ref": "UpdateOneTimeProductRequest"
          },
          "description": "Required. A list of update requests of up to 100 elements. All requests must update different one-time products."
        }
      },
      "type": "object"
    },
    "AppVersionList": {
      "type": "object",
      "id": "AppVersionList",
      "properties": {
        "versionCodes": {
          "type": "array",
          "description": "List of app version codes.",
          "items": {
            "format": "int64",
            "type": "string"
          }
        }
      },
      "description": "Data format for a list of app versions."
    },
    "RegionalProductAgeRatingInfo": {
      "description": "Details about the age rating for a specific geographic region.",
      "type": "object",
      "properties": {
        "regionCode": {
          "type": "string",
          "description": "Region code this configuration applies to, as defined by ISO 3166-1 alpha-2, e.g. \"US\"."
        },
        "productAgeRatingTier": {
          "type": "string",
          "enumDescriptions": [
            "Unknown age rating tier.",
            "Age rating tier for products that are appropriate for all ages.",
            "Age rating tier for products that are appropriate for 13 years and above.",
            "Age rating tier for products that are appropriate for 16 years and above.",
            "Age rating tier for products that are appropriate for 18 years and above."
          ],
          "enum": [
            "PRODUCT_AGE_RATING_TIER_UNKNOWN",
            "PRODUCT_AGE_RATING_TIER_EVERYONE",
            "PRODUCT_AGE_RATING_TIER_THIRTEEN_AND_ABOVE",
            "PRODUCT_AGE_RATING_TIER_SIXTEEN_AND_ABOVE",
            "PRODUCT_AGE_RATING_TIER_EIGHTEEN_AND_ABOVE"
          ],
          "description": "The age rating tier of a product for the given region."
        }
      },
      "id": "RegionalProductAgeRatingInfo"
    },
    "BatchUpdateOneTimeProductOfferStatesRequest": {
      "description": "Request message for BatchUpdateOneTimeProductOfferStates.",
      "type": "object",
      "id": "BatchUpdateOneTimeProductOfferStatesRequest",
      "properties": {
        "requests": {
          "items": {
            "$ref": "UpdateOneTimeProductOfferStateRequest"
          },
          "description": "Required. The update request list of up to 100 elements. All requests must update different offers.",
          "type": "array"
        }
      }
    },
    "KeyedGroup": {
      "type": "object",
      "id": "KeyedGroup",
      "properties": {
        "responses": {
          "description": "Required. Responses in this group.",
          "items": {
            "$ref": "NestedPolicyResponse"
          },
          "type": "array"
        },
        "key": {
          "description": "Required. Key for this group.",
          "type": "string"
        }
      },
      "description": "A group of responses, with a key."
    },
    "UsesPermission": {
      "type": "object",
      "id": "UsesPermission",
      "properties": {
        "name": {
          "type": "string",
          "description": "The name of the permission requested."
        },
        "maxSdkVersion": {
          "type": "integer",
          "description": "Optionally, the maximum SDK version for which the permission is required.",
          "format": "int32"
        }
      },
      "description": "A permission used by this APK."
    },
    "CatalogAppView": {
      "properties": {
        "iarcCertificateId": {
          "description": "The IARC certificate ID for the app.",
          "type": "string"
        },
        "deviceCompatibilityRequirements": {
          "description": "The app may specify multiple sets of device compatibility requirements, and a device is considered compatible with the app if it satisfies at least one of `DeviceCompatibilityRequirements`.",
          "type": "array",
          "items": {
            "$ref": "DeviceCompatibilityRequirements"
          }
        },
        "isAdultOnlyAudience": {
          "description": "Whether the app is targeted to an adult-only (18+) audience.",
          "type": "boolean"
        },
        "developerDetails": {
          "$ref": "DeveloperDetails",
          "description": "The developer details of the app."
        },
        "permissions": {
          "items": {
            "$ref": "CatalogPermission"
          },
          "description": "Required permissions declared by the app which apply for all Android SDK versions.",
          "type": "array"
        },
        "permissionsSdk23": {
          "items": {
            "$ref": "CatalogPermission"
          },
          "description": "Required permissions declared by the app which apply for Android SDK versions SDK 23 and above.",
          "type": "array"
        },
        "excludedDevicesBySelector": {
          "items": {
            "$ref": "CatalogDeviceSelector"
          },
          "type": "array",
          "description": "List of devices excluded from the app's distribution even if they are otherwise compatible with the requirements from device_compatibility_requirements. A device is excluded if it matches any of given the selectors."
        },
        "appContactInformation": {
          "$ref": "AppContactInformation",
          "description": "Developer-provided contact information for the app."
        },
        "localizedStoreListings": {
          "description": "The localized store listings of the app which are shown on Google Play.",
          "$ref": "LocalizedStoreListings"
        },
        "activeVersionNames": {
          "description": "Active versions of the app mapped from `android:versionName` manifest attributes.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "excludedDevicesByIdentifier": {
          "description": "List of devices excluded from the app's distribution even if they are otherwise compatible with the requirements from device_compatibility_requirements. These are OR-ed, i.e. a device is excluded if it matches any of the identifiers.",
          "type": "array",
          "items": {
            "$ref": "DeviceIdentifier"
          }
        },
        "salePriceInTheUnitedStates": {
          "$ref": "Money",
          "description": "The sale price of the app in the United States. Only populated for paid apps with an active US sale."
        },
        "hasInAppPurchases": {
          "description": "Whether the app has in-app purchases through Google Play.",
          "type": "boolean"
        },
        "privacyPolicyUrl": {
          "type": "string",
          "description": "The URL of the app's privacy policy."
        },
        "firstReleaseDate": {
          "description": "The date when the app was first released.",
          "$ref": "Date"
        },
        "priceInTheUnitedStates": {
          "description": "The price of the app in the United States. Empty if the app is free.",
          "$ref": "Money"
        },
        "packageName": {
          "type": "string",
          "description": "The package name of the app."
        },
        "lastPublishTime": {
          "type": "string",
          "description": "The timestamp when the app was last published.",
          "format": "google-datetime"
        },
        "hasInAppAds": {
          "description": "Whether the app has ads.",
          "type": "boolean"
        },
        "appSubcategory": {
          "description": "The subcategory of the app e.g. \"GAME_ACTION\".",
          "type": "string"
        },
        "deliveryToken": {
          "type": "string",
          "description": "The token used for delivery of the app with the Google Play Inline Install API. The token is unique per Play app and per third-party app store combination and has a limited validity period of 7 days."
        },
        "appCategory": {
          "type": "string",
          "enumDescriptions": [
            "Unspecified category.",
            "Game app.",
            "General app."
          ],
          "enum": [
            "APP_CATEGORY_UNSPECIFIED",
            "GAME",
            "APP"
          ],
          "description": "The category of the app."
        }
      },
      "description": "LINT.IfChange A view of a Google Play app within the Catalog Export for app stores.",
      "id": "CatalogAppView",
      "type": "object"
    },
    "RemoteInAppUpdateDataPerBundle": {
      "properties": {
        "recoveredDeviceCount": {
          "type": "string",
          "description": "Total number of devices which have been rescued.",
          "format": "int64"
        },
        "totalDeviceCount": {
          "description": "Total number of devices affected by this recovery action associated with bundle of the app.",
          "type": "string",
          "format": "int64"
        },
        "versionCode": {
          "format": "int64",
          "description": "Version Code corresponding to the target bundle.",
          "type": "string"
        }
      },
      "id": "RemoteInAppUpdateDataPerBundle",
      "type": "object",
      "description": "Data related to the recovery action at bundle level."
    },
    "UpdateSubscriptionOfferRequest": {
      "properties": {
        "updateMask": {
          "description": "Required. The list of fields to be updated.",
          "format": "google-fieldmask",
          "type": "string"
        },
        "regionsVersion": {
          "$ref": "RegionsVersion",
          "description": "Required. The version of the available regions being used for the subscription_offer."
        },
        "subscriptionOffer": {
          "$ref": "SubscriptionOffer",
          "description": "Required. The subscription offer to update."
        },
        "allowMissing": {
          "type": "boolean",
          "description": "Optional. If set to true, and the subscription offer with the given package_name, product_id, base_plan_id and offer_id doesn't exist, an offer will be created. If a new offer is created, update_mask is ignored."
        },
        "latencyTolerance": {
          "type": "string",
          "enum": [
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
          ],
          "description": "Optional. The latency tolerance for the propagation of this product update. Defaults to latency-sensitive.",
          "enumDescriptions": [
            "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
            "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
            "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
          ]
        }
      },
      "description": "Request message for UpdateSubscriptionOffer.",
      "id": "UpdateSubscriptionOfferRequest",
      "type": "object"
    },
    "BatchUpdateOneTimeProductsResponse": {
      "properties": {
        "oneTimeProducts": {
          "description": "The list of updated one-time products list, in the same order as the request.",
          "type": "array",
          "items": {
            "$ref": "OneTimeProduct"
          }
        }
      },
      "id": "BatchUpdateOneTimeProductsResponse",
      "description": "Response message for BatchUpdateOneTimeProduct.",
      "type": "object"
    },
    "PolicySingleChoiceResponse": {
      "properties": {
        "value": {
          "description": "Required. Provided value.",
          "type": "string"
        }
      },
      "id": "PolicySingleChoiceResponse",
      "description": "Any response where a single option is chosen from several possibilities.",
      "type": "object"
    },
    "Comment": {
      "description": "An entry of conversation between user and developer.",
      "type": "object",
      "properties": {
        "userComment": {
          "$ref": "UserComment",
          "description": "A comment from a user."
        },
        "developerComment": {
          "$ref": "DeveloperComment",
          "description": "A comment from a developer."
        }
      },
      "id": "Comment"
    },
    "UpdateSubscriptionOfferStateRequest": {
      "description": "Request message to update the state of a subscription offer.",
      "id": "UpdateSubscriptionOfferStateRequest",
      "properties": {
        "deactivateSubscriptionOfferRequest": {
          "$ref": "DeactivateSubscriptionOfferRequest",
          "description": "Deactivates an offer. Once deactivated, the offer will become unavailable to new subscribers, but existing subscribers will maintain their subscription"
        },
        "activateSubscriptionOfferRequest": {
          "description": "Activates an offer. Once activated, the offer will be available to new subscribers.",
          "$ref": "ActivateSubscriptionOfferRequest"
        }
      },
      "type": "object"
    },
    "ExternalOfferDetails": {
      "description": "Reporting details unique to the external offers program.",
      "id": "ExternalOfferDetails",
      "type": "object",
      "properties": {
        "installedAppPackage": {
          "description": "Optional. The package name of the app downloaded through this transaction. Required when link_type is LINK_TO_APP_DOWNLOAD.",
          "type": "string"
        },
        "appDownloadEventExternalTransactionId": {
          "description": "Optional. The external transaction id associated with the app download event through an external link. Required when reporting transactions made in externally installed apps.",
          "type": "string"
        },
        "installedAppCategory": {
          "description": "Optional. The category of the downloaded app though this transaction. This must match the category provided in Play Console during the external app verification process. Only required for app downloads.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified, do not use.",
            "The app is classified under the app category.",
            "The app is classified under the game category."
          ],
          "enum": [
            "EXTERNAL_OFFER_APP_CATEGORY_UNSPECIFIED",
            "APP",
            "GAME"
          ]
        },
        "linkType": {
          "enumDescriptions": [
            "Unspecified, do not use.",
            "An offer to purchase digital content.",
            "An app install."
          ],
          "enum": [
            "EXTERNAL_OFFER_LINK_TYPE_UNSPECIFIED",
            "LINK_TO_DIGITAL_CONTENT_OFFER",
            "LINK_TO_APP_DOWNLOAD"
          ],
          "type": "string",
          "description": "Optional. The type of content being reported by this transaction. Required when reporting app downloads or purchased digital content offers made in app installed through Google Play."
        }
      }
    },
    "PointsDetails": {
      "id": "PointsDetails",
      "type": "object",
      "properties": {
        "pointsDiscountRateMicros": {
          "type": "string",
          "description": "The percentage rate which the Play Points promotion reduces the cost by. E.g. for a 100 points for $2 coupon, this is 500,000. Since $2 has an estimate of 200 points, but the actual Points required, 100, is 50% of this, and 50% in micros is 500,000. Between 0 and 1,000,000.",
          "format": "int64"
        },
        "pointsSpent": {
          "type": "string",
          "description": "The number of Play Points applied in this order. E.g. for a 100 points for $2 coupon, this is 100. For coupon stacked with base offer, this is the total points spent across both.",
          "format": "int64"
        },
        "pointsOfferId": {
          "description": "ID unique to the play points offer in use for this order.",
          "type": "string"
        },
        "pointsCouponValue": {
          "$ref": "Money",
          "description": "The monetary value of a Play Points coupon. This is the discount the coupon provides, which may not be the total amount. Only set when Play Points coupons have been used. E.g. for a 100 points for $2 coupon, this is $2."
        }
      },
      "description": "Details relating to any Play Points applied to an order."
    },
    "SafetyLabelsUpdateResponse": {
      "description": "Response for SafetyLabelsUpdate rpc.",
      "type": "object",
      "id": "SafetyLabelsUpdateResponse",
      "properties": {}
    },
    "OneTimeProductListing": {
      "properties": {
        "description": {
          "description": "Required. The description of this product in the language of this listing. The maximum length is 200 characters.",
          "type": "string"
        },
        "languageCode": {
          "type": "string",
          "description": "Required. The language of this listing, as defined by BCP-47, e.g., \"en-US\"."
        },
        "title": {
          "type": "string",
          "description": "Required. The title of this product in the language of this listing. The maximum length is 55 characters."
        }
      },
      "type": "object",
      "id": "OneTimeProductListing",
      "description": "Regional store listing for a one-time product."
    },
    "OneTimeProductPurchaseOptionRegionalPricingAndAvailabilityConfig": {
      "description": "Regional pricing and availability configuration for a purchase option.",
      "type": "object",
      "id": "OneTimeProductPurchaseOptionRegionalPricingAndAvailabilityConfig",
      "properties": {
        "regionCode": {
          "description": "Required. Region code this configuration applies to, as defined by ISO 3166-1 alpha-2, e.g., \"US\".",
          "type": "string"
        },
        "price": {
          "$ref": "Money",
          "description": "The price of the purchase option in the specified region. Must be set in the currency that is linked to the specified region."
        },
        "availability": {
          "enum": [
            "AVAILABILITY_UNSPECIFIED",
            "AVAILABLE",
            "NO_LONGER_AVAILABLE",
            "AVAILABLE_IF_RELEASED",
            "AVAILABLE_FOR_OFFERS_ONLY"
          ],
          "enumDescriptions": [
            "Unspecified availability. Must not be used.",
            "The purchase option is available to users.",
            "The purchase option is no longer available to users. This value can only be used if the availability was previously set as AVAILABLE.",
            "The purchase option is initially unavailable, but made available via a released pre-order offer.",
            "The purchase option is unavailable but offers linked to it (i.e. Play Points offer) are available."
          ],
          "type": "string",
          "description": "The availability of the purchase option."
        }
      }
    },
    "PolicyGroupResponse": {
      "type": "object",
      "description": "A repeated group of responses.",
      "properties": {
        "groups": {
          "type": "array",
          "description": "Optional. Groups of responses to questions.",
          "items": {
            "$ref": "Group"
          }
        }
      },
      "id": "PolicyGroupResponse"
    },
    "PurchaseOptionTaxAndComplianceSettings": {
      "description": "Details about taxation, Google Play policy and legal compliance for one-time product purchase options.",
      "type": "object",
      "properties": {
        "withdrawalRightType": {
          "description": "Optional. Digital content or service classification for products distributed to users in eligible regions. If unset, it defaults to `WITHDRAWAL_RIGHT_DIGITAL_CONTENT`. Refer to the [Help Center article](https://support.google.com/googleplay/android-developer/answer/10463498) for more information.",
          "type": "string",
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "enum": [
            "WITHDRAWAL_RIGHT_TYPE_UNSPECIFIED",
            "WITHDRAWAL_RIGHT_DIGITAL_CONTENT",
            "WITHDRAWAL_RIGHT_SERVICE"
          ]
        }
      },
      "id": "PurchaseOptionTaxAndComplianceSettings"
    },
    "DeviceIdentifier": {
      "properties": {
        "deviceBrand": {
          "type": "string",
          "description": "The brand of the device."
        },
        "deviceModel": {
          "type": "string",
          "description": "The model of the device."
        }
      },
      "id": "DeviceIdentifier",
      "description": "Defines a device identifier for a device.",
      "type": "object"
    },
    "Order": {
      "properties": {
        "orderHistory": {
          "$ref": "OrderHistory",
          "description": "Details about events which modified the order."
        },
        "total": {
          "description": "The final amount paid by the customer, taking into account discounts and taxes.",
          "$ref": "Money"
        },
        "salesChannel": {
          "description": "The originating sales channel of the order.",
          "enumDescriptions": [
            "Sales channel unspecified. This value is not used.",
            "Standard orders that initiated from in-app.",
            "Orders initiated from a PC emulator for in-app purchases.",
            "Orders initiated from a native PC app for in-app purchases.",
            "Orders initiated from the Google Play store.",
            "Orders initiated outside the Google Play store."
          ],
          "enum": [
            "SALES_CHANNEL_UNSPECIFIED",
            "IN_APP",
            "PC_EMULATOR",
            "NATIVE_PC",
            "PLAY_STORE",
            "OUTSIDE_PLAY_STORE"
          ],
          "type": "string"
        },
        "tax": {
          "description": "The total tax paid as a part of this order.",
          "$ref": "Money"
        },
        "lineItems": {
          "type": "array",
          "description": "The individual line items making up this order.",
          "items": {
            "$ref": "LineItem"
          }
        },
        "buyerAddress": {
          "description": "Address information for the customer, for use in tax computation. When Google is the Merchant of Record for the order, only country is shown.",
          "$ref": "BuyerAddress"
        },
        "createTime": {
          "type": "string",
          "format": "google-datetime",
          "description": "The time when the order was created."
        },
        "state": {
          "enumDescriptions": [
            "State unspecified. This value is not used.",
            "Order has been created and is waiting to be processed.",
            "Order has been successfully processed.",
            "Order was canceled before being processed.",
            "Requested refund is waiting to be processed.",
            "Part of the order amount was refunded.",
            "The full order amount was refunded."
          ],
          "enum": [
            "STATE_UNSPECIFIED",
            "PENDING",
            "PROCESSED",
            "CANCELED",
            "PENDING_REFUND",
            "PARTIALLY_REFUNDED",
            "REFUNDED"
          ],
          "type": "string",
          "description": "The state of the order."
        },
        "purchaseToken": {
          "description": "The token provided to the user's device when the subscription or item was purchased.",
          "type": "string"
        },
        "pointsDetails": {
          "description": "Play points applied to the order, including offer information, discount rate and point values.",
          "$ref": "PointsDetails"
        },
        "orderId": {
          "description": "The order ID.",
          "type": "string"
        },
        "developerRevenueInBuyerCurrency": {
          "description": "Your revenue for this order in the buyer's currency, including deductions of partial refunds, taxes and fees. Google deducts standard transaction and third party fees from each sale, including VAT in some regions.",
          "$ref": "Money"
        },
        "orderDetails": {
          "$ref": "OrderDetails",
          "description": "Detailed information about the order at creation time."
        },
        "lastEventTime": {
          "description": "The time of the last event that occurred on the order.",
          "format": "google-datetime",
          "type": "string"
        }
      },
      "description": "The Order resource encapsulates comprehensive information about a transaction made on Google Play. It includes a variety of attributes that provide details about the order itself, the products purchased, and the history of events related to the order. The Orders APIs provide real-time access to your order data within the Google Play ecosystem. You can retrieve detailed information and metadata for both one-time and recurring orders, including transaction details like charges, taxes, and refunds, as well as metadata such as pricing phases for subscriptions. The Orders APIs let you automate tasks related to order management, reducing the need for manual checks via the Play Developer Console. The following are some of the use cases for this API: + Real-time order data retrieval - Get order details and metadata immediately after a purchase using an order ID. + Order update synchronization - Periodically sync order updates to maintain an up-to-date record of order information. Note: + The Orders API calls count towards your Play Developer API quota, which defaults to 200K daily, and may be insufficient to sync extensive order histories. + A maximum of 1000 orders can be retrieved per call. Using larger page sizes is recommended to minimize quota usage. Check your quota in the Cloud Console and request more if required.",
      "type": "object",
      "id": "Order"
    },
    "TentativeTransition": {
      "description": "Used to indicate that the plan transition is tentative.",
      "id": "TentativeTransition",
      "type": "object",
      "properties": {}
    },
    "AppEdit": {
      "type": "object",
      "properties": {
        "expiryTimeSeconds": {
          "description": "Output only. The time (as seconds since Epoch) at which the edit will expire and will be no longer valid for use.",
          "readOnly": true,
          "type": "string"
        },
        "id": {
          "description": "Output only. Identifier of the edit. Can be used in subsequent API calls.",
          "type": "string",
          "readOnly": true
        }
      },
      "description": "An app edit. The resource for EditsService.",
      "id": "AppEdit"
    },
    "RenewalDeclinedContext": {
      "id": "RenewalDeclinedContext",
      "properties": {
        "pendingOrderId": {
          "type": "string",
          "description": "Required. The ID of the pending or failed order causing the state."
        }
      },
      "description": "Context related to renewal declined scenario.",
      "type": "object"
    },
    "Grant": {
      "type": "object",
      "description": "An access grant resource.",
      "properties": {
        "name": {
          "description": "Required. Resource name for this grant, following the pattern \"developers/{developer}/users/{email}/grants/{package_name}\". If this grant is for a draft app, the app ID will be used in this resource name instead of the package name.",
          "type": "string"
        },
        "packageName": {
          "type": "string",
          "description": "Immutable. The package name of the app. This will be empty for draft apps."
        },
        "appLevelPermissions": {
          "type": "array",
          "items": {
            "type": "string",
            "enumDeprecated": [
              false,
              true,
              false,
              false,
              false,
              false,
              false,
              false,
              false,
              false,
              false,
              false,
              false,
              false,
              false
            ],
            "enum": [
              "APP_LEVEL_PERMISSION_UNSPECIFIED",
              "CAN_ACCESS_APP",
              "CAN_VIEW_FINANCIAL_DATA",
              "CAN_MANAGE_PERMISSIONS",
              "CAN_REPLY_TO_REVIEWS",
              "CAN_MANAGE_PUBLIC_APKS",
              "CAN_MANAGE_TRACK_APKS",
              "CAN_MANAGE_TRACK_USERS",
              "CAN_MANAGE_PUBLIC_LISTING",
              "CAN_MANAGE_DRAFT_APPS",
              "CAN_MANAGE_ORDERS",
              "CAN_MANAGE_APP_CONTENT",
              "CAN_VIEW_NON_FINANCIAL_DATA",
              "CAN_VIEW_APP_QUALITY",
              "CAN_MANAGE_DEEPLINKS"
            ],
            "enumDescriptions": [
              "Unknown or unspecified permission.",
              "View app information (read-only). Deprecated: Try defining a more granular capability. Otherwise, check AppLevelPermission.CAN_VIEW_NON_FINANCIAL_DATA.",
              "View financial data.",
              "Admin (all permissions).",
              "Reply to reviews.",
              "Release to production, exclude devices, and use app signing by Google Play.",
              "Release to testing tracks.",
              "Manage testing tracks and edit tester lists.",
              "Manage store presence.",
              "Edit and delete draft apps.",
              "Manage orders and subscriptions.",
              "Manage policy related pages.",
              "View app information (read-only).",
              "View app quality data such as Vitals, Crashes etc.",
              "Manage the deep links setup of an app."
            ]
          },
          "description": "The permissions granted to the user for this app."
        }
      },
      "id": "Grant"
    },
    "Group": {
      "type": "object",
      "id": "Group",
      "description": "A group of responses.",
      "properties": {
        "responses": {
          "type": "array",
          "items": {
            "$ref": "NestedPolicyResponse"
          },
          "description": "Required. Responses within a group."
        }
      }
    },
    "RamSelector": {
      "properties": {
        "ramMbLessThanOrEqual": {
          "type": "string",
          "description": "This will match any device that has less than or equal ram_mb_less_than_or_equal mb of RAM.",
          "format": "int64"
        }
      },
      "id": "RamSelector",
      "type": "object",
      "description": "Defines a RAM selector for a device."
    },
    "DeleteOneTimeProductOfferRequest": {
      "type": "object",
      "properties": {
        "purchaseOptionId": {
          "description": "Required. The parent purchase option (ID) of the offer to delete.",
          "type": "string"
        },
        "offerId": {
          "description": "Required. The unique offer ID of the offer to delete.",
          "type": "string"
        },
        "productId": {
          "description": "Required. The parent one-time product (ID) of the offer to delete.",
          "type": "string"
        },
        "packageName": {
          "type": "string",
          "description": "Required. The parent app (package name) of the offer to delete."
        },
        "latencyTolerance": {
          "type": "string",
          "enum": [
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
          ],
          "enumDescriptions": [
            "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
            "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
            "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
          ],
          "description": "Optional. The latency tolerance for the propagation of this product update. Defaults to latency-sensitive."
        }
      },
      "description": "Request message for deleting an one-time product offer.",
      "id": "DeleteOneTimeProductOfferRequest"
    },
    "ConvertedRegionPrice": {
      "properties": {
        "price": {
          "description": "The converted price tax inclusive.",
          "$ref": "Money"
        },
        "regionCode": {
          "description": "The region code of the region.",
          "type": "string"
        },
        "taxAmount": {
          "$ref": "Money",
          "description": "The tax amount of the converted price."
        }
      },
      "id": "ConvertedRegionPrice",
      "type": "object",
      "description": "A converted region price."
    },
    "CancelPlanTransitionRequest": {
      "description": "Request for the purchases.subscriptionsv2.cancelplantransition API.",
      "type": "object",
      "id": "CancelPlanTransitionRequest",
      "properties": {
        "productId": {
          "description": "Required. The subscription product (for example, 'premium_plan') for which an in process plan transition should be canceled.",
          "type": "string"
        },
        "etag": {
          "type": "string",
          "description": "If set, the API will fail if the etag does not match the latest etag for this subscription. The etag is retrieved from purchases.subscriptionsv2.get: https://developers.google.com/android-publisher/api-ref/rest/v3/purchases.subscriptionsv2/get"
        }
      }
    },
    "CancelOneTimeProductOfferRequest": {
      "id": "CancelOneTimeProductOfferRequest",
      "type": "object",
      "description": "Request message for CancelOneTimeProductOffer.",
      "properties": {
        "productId": {
          "type": "string",
          "description": "Required. The parent one-time product (ID) of the offer to cancel."
        },
        "offerId": {
          "description": "Required. The offer ID of the offer to cancel.",
          "type": "string"
        },
        "purchaseOptionId": {
          "description": "Required. The parent purchase option (ID) of the offer to cancel.",
          "type": "string"
        },
        "latencyTolerance": {
          "description": "Optional. The latency tolerance for the propagation of this update. Defaults to latency-sensitive.",
          "enumDescriptions": [
            "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
            "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
            "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
          ],
          "enum": [
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
          ],
          "type": "string"
        },
        "packageName": {
          "type": "string",
          "description": "Required. The parent app (package name) of the offer to cancel."
        }
      }
    },
    "RegionalPriceMigrationConfig": {
      "description": "Configuration for migration of a legacy price cohort.",
      "properties": {
        "priceIncreaseType": {
          "enumDescriptions": [
            "Unspecified state.",
            "Subscribers must accept the price increase or their subscription is canceled.",
            "Subscribers are notified but do not have to accept the price increase. Opt-out price increases not meeting regional, frequency, and amount limits will proceed as opt-in price increase. The first opt-out price increase for each app must be initiated in the Google Play Console."
          ],
          "description": "Optional. The requested type of price increase",
          "type": "string",
          "enum": [
            "PRICE_INCREASE_TYPE_UNSPECIFIED",
            "PRICE_INCREASE_TYPE_OPT_IN",
            "PRICE_INCREASE_TYPE_OPT_OUT"
          ]
        },
        "regionCode": {
          "description": "Required. Region code this configuration applies to, as defined by ISO 3166-1 alpha-2, e.g. \"US\".",
          "type": "string"
        },
        "oldestAllowedPriceVersionTime": {
          "format": "google-datetime",
          "type": "string",
          "description": "Required. Subscribers in all legacy price cohorts before this time will be migrated to the current price. Subscribers in any newer price cohorts are unaffected. Affected subscribers will receive one or more notifications from Google Play about the price change. Price decreases occur at the subscriber's next billing date. Price increases occur at the subscriber's next billing date following a notification period that varies by region and price increase type."
        }
      },
      "id": "RegionalPriceMigrationConfig",
      "type": "object"
    },
    "PageInfo": {
      "id": "PageInfo",
      "properties": {
        "totalResults": {
          "description": "Total number of results available on the backend ! The total number of results in the result set.",
          "format": "int32",
          "type": "integer"
        },
        "startIndex": {
          "description": "Index of the first result returned in the current page.",
          "type": "integer",
          "format": "int32"
        },
        "resultPerPage": {
          "description": "Maximum number of results returned in one page. ! The number of results included in the API response.",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object",
      "description": "Information about the current page. List operations that supports paging return only one \"page\" of results. This protocol buffer message describes the page that has been returned."
    },
    "SubscriptionPurchasesDeferRequest": {
      "properties": {
        "deferralInfo": {
          "description": "The information about the new desired expiry time for the subscription.",
          "$ref": "SubscriptionDeferralInfo"
        }
      },
      "id": "SubscriptionPurchasesDeferRequest",
      "type": "object",
      "description": "Request for the purchases.subscriptions.defer API."
    },
    "TargetingRuleScopeAnySubscriptionInApp": {
      "type": "object",
      "description": "Represents the targeting rule scope corresponding to any subscription in the parent app.",
      "properties": {},
      "id": "TargetingRuleScopeAnySubscriptionInApp"
    },
    "SubscriptionPurchasesAcknowledgeRequest": {
      "properties": {
        "developerPayload": {
          "description": "Payload to attach to the purchase.",
          "type": "string"
        },
        "externalAccountIds": {
          "$ref": "ExternalAccountIds",
          "description": "Optional. User account identifier in your app."
        }
      },
      "type": "object",
      "description": "Request for the purchases.subscriptions.acknowledge API.",
      "id": "SubscriptionPurchasesAcknowledgeRequest"
    },
    "SplitApkVariant": {
      "id": "SplitApkVariant",
      "type": "object",
      "description": "Variant is a group of APKs that covers a part of the device configuration space. APKs from multiple variants are never combined on one device.",
      "properties": {
        "apkSet": {
          "description": "Set of APKs, one set per module.",
          "items": {
            "$ref": "ApkSet"
          },
          "type": "array"
        },
        "variantNumber": {
          "format": "int32",
          "type": "integer",
          "description": "Number of the variant, starting at 0 (unless overridden). A device will receive APKs from the first variant that matches the device configuration, with higher variant numbers having priority over lower variant numbers."
        },
        "targeting": {
          "description": "Variant-level targeting.",
          "$ref": "VariantTargeting"
        }
      }
    },
    "ActivateBasePlanRequest": {
      "description": "Request message for ActivateBasePlan.",
      "id": "ActivateBasePlanRequest",
      "type": "object",
      "properties": {
        "packageName": {
          "description": "Required. The parent app (package name) of the base plan to activate.",
          "type": "string"
        },
        "basePlanId": {
          "type": "string",
          "description": "Required. The unique base plan ID of the base plan to activate."
        },
        "productId": {
          "type": "string",
          "description": "Required. The parent subscription (ID) of the base plan to activate."
        },
        "latencyTolerance": {
          "enum": [
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
          ],
          "type": "string",
          "description": "Optional. The latency tolerance for the propagation of this product update. Defaults to latency-sensitive.",
          "enumDescriptions": [
            "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
            "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
            "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
          ]
        }
      }
    },
    "ListOneTimeProductOffersResponse": {
      "description": "Response message for ListOneTimeProductOffers.",
      "type": "object",
      "properties": {
        "oneTimeProductOffers": {
          "description": "The one_time_product offers from the specified request.",
          "items": {
            "$ref": "OneTimeProductOffer"
          },
          "type": "array"
        },
        "nextPageToken": {
          "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.",
          "type": "string"
        }
      },
      "id": "ListOneTimeProductOffersResponse"
    },
    "InGracePeriodStateContext": {
      "type": "object",
      "id": "InGracePeriodStateContext",
      "description": "Additional context around subscriptions in IN_GRACE_PERIOD state.",
      "properties": {
        "renewalDeclined": {
          "description": "Optional. The payment for the renewal was declined.",
          "$ref": "RenewalDeclinedContext"
        }
      }
    },
    "SubscriptionListing": {
      "description": "The consumer-visible metadata of a subscription.",
      "properties": {
        "languageCode": {
          "type": "string",
          "description": "Required. The language of this listing, as defined by BCP-47, e.g. \"en-US\"."
        },
        "description": {
          "description": "The description of this subscription in the language of this listing. Maximum length - 200 characters. Plain text.",
          "type": "string"
        },
        "title": {
          "description": "Required. The title of this subscription in the language of this listing. Plain text.",
          "type": "string"
        },
        "benefits": {
          "description": "A list of benefits shown to the user on platforms such as the Play Store and in restoration flows in the language of this listing. Plain text. Ordered list of at most four benefits.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object",
      "id": "SubscriptionListing"
    },
    "TransitionInfo": {
      "type": "object",
      "description": "Information related to a scheduled plan transition.",
      "properties": {
        "transitionState": {
          "enum": [
            "TRANSITION_STATE_UNSPECIFIED",
            "SCHEDULED",
            "IN_PROGRESS",
            "COMPLETED",
            "CANCELED"
          ],
          "description": "Output only. [Required] The current state of the transition.",
          "type": "string",
          "readOnly": true,
          "enumDescriptions": [
            "Unspecified transition state.",
            "The transition is scheduled to start in the future.",
            "The transition process has been initiated and the initial transition notification has been sent to the user.",
            "The transition has been completed.",
            "The transition was canceled."
          ]
        },
        "expectedTransitionTime": {
          "type": "string",
          "format": "google-datetime",
          "description": "The current expected time at which the plan may be transitioned. This is subject to change (to a future time) due to cases where the renewal time shifts like pause and account hold."
        },
        "price": {
          "$ref": "Money",
          "description": "The default base plan price to which the plan will be transitioned."
        }
      },
      "id": "TransitionInfo"
    },
    "RefundEvent": {
      "properties": {
        "eventTime": {
          "type": "string",
          "description": "The time when the order was fully refunded.",
          "format": "google-datetime"
        },
        "refundReason": {
          "enum": [
            "REFUND_REASON_UNSPECIFIED",
            "OTHER",
            "CHARGEBACK"
          ],
          "type": "string",
          "enumDescriptions": [
            "Refund reason unspecified. This value is not used.",
            "The order was refunded for a reason other than the listed reasons here.",
            "The order was charged back."
          ],
          "description": "The reason the order was refunded."
        },
        "refundDetails": {
          "$ref": "RefundDetails",
          "description": "Details for the full refund."
        }
      },
      "id": "RefundEvent",
      "description": "Details of when the order was fully refunded.",
      "type": "object"
    },
    "Image": {
      "description": "An uploaded image. The resource for ImagesService.",
      "id": "Image",
      "properties": {
        "id": {
          "description": "A unique id representing this image.",
          "type": "string"
        },
        "sha256": {
          "description": "A sha256 hash of the image.",
          "type": "string"
        },
        "aiGeneratedState": {
          "enum": [
            "aiGeneratedStateUnspecified",
            "aiGeneratedStateNotAiGenerated",
            "aiGeneratedStateAiGeneratedDeveloperAttested"
          ],
          "enumDescriptions": [
            "Catch-all for unrecognized enum values. See go/protodosdonts.",
            "The content is not generated by AI.",
            "The content is generated by AI and attested by the developer."
          ],
          "type": "string",
          "description": "Optional. Whether the image was generated by AI. Attested by the developer."
        },
        "sha1": {
          "type": "string",
          "description": "A sha1 hash of the image."
        },
        "url": {
          "description": "A URL that will serve a preview of the image.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "EnrollAppRequest": {
      "id": "EnrollAppRequest",
      "description": "Request to enroll an app into Play App Signing using a self-hosted Cloud KMS key.",
      "type": "object",
      "properties": {
        "pemUploadCertificate": {
          "description": "The certificate associated with the upload key, in PEM format.",
          "format": "byte",
          "type": "string"
        },
        "enrollNewApp": {
          "$ref": "EnrollNewApp",
          "description": "Changes the signing key of a new app to an external Cloud KMS key. The app must not have published to Open testing or Production tracks."
        },
        "enrollExistingApp": {
          "description": "Enrolls an existing app into Play signing using an external Cloud KMS key.",
          "$ref": "EnrollExistingApp"
        }
      }
    },
    "ExternalSubscription": {
      "type": "object",
      "id": "ExternalSubscription",
      "description": "Details of an external subscription.",
      "properties": {
        "subscriptionType": {
          "description": "Required. The type of the external subscription.",
          "enum": [
            "SUBSCRIPTION_TYPE_UNSPECIFIED",
            "RECURRING",
            "PREPAID"
          ],
          "enumDescriptions": [
            "Unspecified, do not use.",
            "This is a recurring subscription where the user is charged every billing cycle.",
            "This is a prepaid subscription where the user pays up front."
          ],
          "type": "string"
        }
      }
    },
    "LineItem": {
      "description": "Details of a line item.",
      "id": "LineItem",
      "properties": {
        "oneTimePurchaseDetails": {
          "description": "Details of a one-time purchase.",
          "$ref": "OneTimePurchaseDetails"
        },
        "productTitle": {
          "description": "Developer-specified name of the product. Displayed in buyer's locale. Example: coins, monthly subscription, etc.",
          "type": "string"
        },
        "subscriptionDetails": {
          "description": "Details of a subscription purchase.",
          "$ref": "SubscriptionDetails"
        },
        "tax": {
          "description": "The tax paid for this line item.",
          "$ref": "Money"
        },
        "total": {
          "description": "The total amount paid by the user for this line item, taking into account discounts and tax.",
          "$ref": "Money"
        },
        "listingPrice": {
          "description": "Item's listed price on Play Store, this may or may not include tax. Excludes Google-funded discounts only.",
          "$ref": "Money"
        },
        "paidAppDetails": {
          "$ref": "PaidAppDetails",
          "description": "Details of a paid app purchase."
        },
        "productId": {
          "description": "The purchased product ID or in-app SKU (for example, 'monthly001' or 'com.some.thing.inapp1').",
          "type": "string"
        }
      },
      "type": "object"
    },
    "ScreenDensityTargeting": {
      "id": "ScreenDensityTargeting",
      "description": "Targeting based on screen density.",
      "properties": {
        "alternatives": {
          "type": "array",
          "description": "Targeting of other sibling directories that were in the Bundle. For main splits this is targeting of other main splits.",
          "items": {
            "$ref": "ScreenDensity"
          }
        },
        "value": {
          "description": "Value of a screen density.",
          "items": {
            "$ref": "ScreenDensity"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "InappproductsDeleteRequest": {
      "id": "InappproductsDeleteRequest",
      "properties": {
        "packageName": {
          "description": "Package name of the app.",
          "type": "string"
        },
        "latencyTolerance": {
          "description": "Optional. The latency tolerance for the propagation of this product update. Defaults to latency-sensitive.",
          "type": "string",
          "enumDescriptions": [
            "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
            "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
            "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
          ],
          "enum": [
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
          ]
        },
        "sku": {
          "description": "Unique identifier for the in-app product.",
          "type": "string"
        }
      },
      "description": "Request to delete an in-app product.",
      "type": "object"
    },
    "ImagesDeleteAllResponse": {
      "type": "object",
      "properties": {
        "deleted": {
          "items": {
            "$ref": "Image"
          },
          "type": "array",
          "description": "The deleted images."
        }
      },
      "id": "ImagesDeleteAllResponse",
      "description": "Response for deleting all images."
    },
    "ArchiveSubscriptionRequest": {
      "description": "Deprecated: subscription archiving is not supported.",
      "properties": {},
      "id": "ArchiveSubscriptionRequest",
      "deprecated": true,
      "type": "object"
    },
    "UploadImageRequest": {
      "description": "Request to upload an image.",
      "id": "UploadImageRequest",
      "type": "object",
      "properties": {}
    },
    "SignupPromotion": {
      "properties": {
        "oneTimeCode": {
          "description": "A one-time code was applied.",
          "$ref": "OneTimeCode"
        },
        "vanityCode": {
          "$ref": "VanityCode",
          "description": "A vanity code was applied."
        }
      },
      "description": "The promotion applied on this item when purchased.",
      "type": "object",
      "id": "SignupPromotion"
    },
    "UpdatePurchaseOptionStateRequest": {
      "properties": {
        "activatePurchaseOptionRequest": {
          "description": "Activates a purchase option. Once activated, the purchase option will be available.",
          "$ref": "ActivatePurchaseOptionRequest"
        },
        "deactivatePurchaseOptionRequest": {
          "description": "Deactivates a purchase option. Once deactivated, the purchase option will become unavailable.",
          "$ref": "DeactivatePurchaseOptionRequest"
        }
      },
      "description": "Request message to update the state of a one-time product purchase option.",
      "type": "object",
      "id": "UpdatePurchaseOptionStateRequest"
    },
    "RevokeSubscriptionPurchaseResponse": {
      "properties": {},
      "type": "object",
      "id": "RevokeSubscriptionPurchaseResponse",
      "description": "Response for the purchases.subscriptionsv2.revoke API."
    },
    "VideoAsset": {
      "id": "VideoAsset",
      "properties": {
        "videoUrl": {
          "type": "string",
          "description": "The URL of the video asset."
        }
      },
      "type": "object",
      "description": "A video asset."
    },
    "CancelPlanTransitionResponse": {
      "id": "CancelPlanTransitionResponse",
      "properties": {},
      "type": "object",
      "description": "Response for the purchases.subscriptionsv2.cancelplantransition API."
    },
    "Abi": {
      "description": "Represents an Abi.",
      "properties": {
        "alias": {
          "enumDescriptions": [
            "Unspecified abi.",
            "ARMEABI abi.",
            "ARMEABI_V7A abi.",
            "ARM64_V8A abi.",
            "X86 abi.",
            "X86_64 abi.",
            "RISCV64 abi."
          ],
          "description": "Alias for an abi.",
          "enum": [
            "UNSPECIFIED_CPU_ARCHITECTURE",
            "ARMEABI",
            "ARMEABI_V7A",
            "ARM64_V8A",
            "X86",
            "X86_64",
            "RISCV64"
          ],
          "type": "string"
        }
      },
      "type": "object",
      "id": "Abi"
    },
    "UpdateOneTimeProductOfferRequest": {
      "properties": {
        "regionsVersion": {
          "$ref": "RegionsVersion",
          "description": "Required. The version of the available regions being used for the offer."
        },
        "latencyTolerance": {
          "type": "string",
          "enum": [
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
          ],
          "description": "Optional. The latency tolerance for the propagation of this offer update. Defaults to latency-sensitive.",
          "enumDescriptions": [
            "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
            "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
            "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
          ]
        },
        "updateMask": {
          "description": "Required. The list of fields to be updated.",
          "type": "string",
          "format": "google-fieldmask"
        },
        "oneTimeProductOffer": {
          "description": "Required. The one-time product offer to update.",
          "$ref": "OneTimeProductOffer"
        },
        "allowMissing": {
          "description": "Optional. If set to true, and the offer with the given package_name, product_id, purchase_option_id and offer_id doesn't exist, an offer will be created. If a new offer is created, the update_mask is ignored.",
          "type": "boolean"
        }
      },
      "description": "Request message for UpdateOneTimeProductOffer.",
      "type": "object",
      "id": "UpdateOneTimeProductOfferRequest"
    },
    "RefundExternalTransactionRequest": {
      "properties": {
        "fullRefund": {
          "$ref": "FullRefund",
          "description": "A full-amount refund."
        },
        "refundTime": {
          "type": "string",
          "description": "Required. The time that the transaction was refunded.",
          "format": "google-datetime"
        },
        "partialRefund": {
          "description": "A partial refund.",
          "$ref": "PartialRefund"
        }
      },
      "description": "A request to refund an existing external transaction.",
      "id": "RefundExternalTransactionRequest",
      "type": "object"
    },
    "UploadAppStoreAppPolicyDeclarationFileResponse": {
      "description": "Response for uploading a policy declaration file.",
      "id": "UploadAppStoreAppPolicyDeclarationFileResponse",
      "type": "object",
      "properties": {
        "fileId": {
          "description": "The unique ID of the uploaded file.",
          "type": "string"
        }
      }
    },
    "ListingsListResponse": {
      "type": "object",
      "id": "ListingsListResponse",
      "properties": {
        "listings": {
          "items": {
            "$ref": "Listing"
          },
          "type": "array",
          "description": "All localized listings."
        },
        "kind": {
          "type": "string",
          "description": "The kind of this response (\"androidpublisher#listingsListResponse\")."
        }
      },
      "description": "Response listing all localized listings."
    },
    "SubscriptionDeferralInfo": {
      "type": "object",
      "description": "A SubscriptionDeferralInfo contains the data needed to defer a subscription purchase to a future expiry time.",
      "id": "SubscriptionDeferralInfo",
      "properties": {
        "expectedExpiryTimeMillis": {
          "type": "string",
          "format": "int64",
          "description": "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."
        },
        "desiredExpiryTimeMillis": {
          "description": "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.",
          "format": "int64",
          "type": "string"
        }
      }
    },
    "GeneratedRecoveryApk": {
      "id": "GeneratedRecoveryApk",
      "description": "Download metadata for an app recovery module.",
      "properties": {
        "recoveryStatus": {
          "enumDescriptions": [
            "RecoveryStatus is unspecified.",
            "The app recovery action has not been canceled since it has been created.",
            "The recovery action has been canceled. The action cannot be resumed.",
            "The recovery action is in the draft state and has not yet been deployed to users.",
            "The recovery action is generating recovery apks.",
            "The app recovery action generation has failed."
          ],
          "enum": [
            "RECOVERY_STATUS_UNSPECIFIED",
            "RECOVERY_STATUS_ACTIVE",
            "RECOVERY_STATUS_CANCELED",
            "RECOVERY_STATUS_DRAFT",
            "RECOVERY_STATUS_GENERATION_IN_PROGRESS",
            "RECOVERY_STATUS_GENERATION_FAILED"
          ],
          "description": "The status of the recovery action corresponding to the recovery apk.",
          "type": "string"
        },
        "moduleName": {
          "description": "Name of the module which recovery apk belongs to.",
          "type": "string"
        },
        "downloadId": {
          "type": "string",
          "description": "Download ID, which uniquely identifies the APK to download. Should be supplied to `generatedapks.download` method."
        },
        "recoveryId": {
          "type": "string",
          "description": "ID of the recovery action.",
          "format": "int64"
        }
      },
      "type": "object"
    },
    "LocalizedStoreListing": {
      "id": "LocalizedStoreListing",
      "description": "A localized store listings of the app.",
      "type": "object",
      "properties": {
        "shortDescription": {
          "type": "string",
          "description": "A short description of the app in this localization."
        },
        "languageCode": {
          "description": "The BCP-47 language code for this localization.",
          "type": "string"
        },
        "tabletRegularScreenshots": {
          "description": "The regular tablet screenshots of the app.",
          "$ref": "ScreenshotSet"
        },
        "tabletSmallScreenshots": {
          "$ref": "ScreenshotSet",
          "description": "The small tablet screenshots of the app."
        },
        "video": {
          "description": "The video of the app.",
          "$ref": "VideoAsset"
        },
        "featureGraphic": {
          "description": "The feature graphic of the app.",
          "$ref": "ImageAsset"
        },
        "appName": {
          "type": "string",
          "description": "The name of the app in this localization."
        },
        "fullDescription": {
          "type": "string",
          "description": "A longer description of the app in this localization."
        },
        "icon": {
          "$ref": "ImageAsset",
          "description": "The icon of the app."
        },
        "phoneScreenshots": {
          "description": "The phone screenshots of the app.",
          "$ref": "ScreenshotSet"
        }
      }
    },
    "UpdateAppStoreHostedAppPublishStatusResponse": {
      "description": "Response for updating the publish status of an app store hosted app.",
      "type": "object",
      "id": "UpdateAppStoreHostedAppPublishStatusResponse",
      "properties": {}
    },
    "ListReleaseSummariesResponse": {
      "id": "ListReleaseSummariesResponse",
      "description": "Response listing all releases for a given track that are either ready to be sent for review, in review, approved, not approved or available.",
      "properties": {
        "releases": {
          "type": "array",
          "description": "List of releases for this track. A maximum of 20 releases can be returned.",
          "items": {
            "$ref": "ReleaseSummary"
          }
        }
      },
      "type": "object"
    },
    "FullRefund": {
      "properties": {},
      "description": "A full refund of the remaining amount of a transaction.",
      "id": "FullRefund",
      "type": "object"
    },
    "RegionalBasePlanConfig": {
      "description": "Configuration for a base plan specific to a region.",
      "id": "RegionalBasePlanConfig",
      "type": "object",
      "properties": {
        "price": {
          "description": "The price of the base plan in the specified region. Must be set if the base plan is available to new subscribers. Must be set in the currency that is linked to the specified region.",
          "$ref": "Money"
        },
        "regionCode": {
          "description": "Required. Region code this configuration applies to, as defined by ISO 3166-1 alpha-2, e.g. \"US\".",
          "type": "string"
        },
        "newSubscriberAvailability": {
          "type": "boolean",
          "description": "Whether the base plan in the specified region is available for new subscribers. Existing subscribers will not have their subscription canceled if this value is set to false. If not specified, this will default to false."
        }
      }
    },
    "Testers": {
      "description": "The testers of an app. The resource for TestersService. Note: while it is possible in the Play Console UI to add testers via email lists, email lists are not supported by this resource.",
      "id": "Testers",
      "type": "object",
      "properties": {
        "googleGroups": {
          "items": {
            "type": "string"
          },
          "description": "All testing Google Groups, as email addresses.",
          "type": "array"
        }
      }
    },
    "CatalogPermission": {
      "id": "CatalogPermission",
      "properties": {
        "name": {
          "description": "The `name` attribute indicating the permission name.",
          "type": "string"
        },
        "maxSdkVersion": {
          "format": "int32",
          "type": "integer",
          "description": "The `maxSdkVersion` attribute indicating up to which Android SDK version the permission is requested."
        }
      },
      "type": "object",
      "description": "A permission declared by an app."
    },
    "Subscription": {
      "properties": {
        "productId": {
          "description": "Immutable. Unique product ID of the product. Unique within the parent app. Product IDs must be composed of lower-case letters (a-z), numbers (0-9), underscores (_) and dots (.). It must start with a lower-case letter or number, and be between 1 and 40 (inclusive) characters in length.",
          "type": "string"
        },
        "basePlans": {
          "type": "array",
          "description": "The set of base plans for this subscription. Represents the prices and duration of the subscription if no other offers apply.",
          "items": {
            "$ref": "BasePlan"
          }
        },
        "listings": {
          "description": "Required. List of localized listings for this subscription. Must contain at least an entry for the default language of the parent app.",
          "items": {
            "$ref": "SubscriptionListing"
          },
          "type": "array"
        },
        "taxAndComplianceSettings": {
          "description": "Details about taxes and legal compliance.",
          "$ref": "SubscriptionTaxAndComplianceSettings"
        },
        "packageName": {
          "type": "string",
          "description": "Immutable. Package name of the parent app."
        },
        "archived": {
          "deprecated": true,
          "description": "Output only. Deprecated: subscription archiving is not supported.",
          "type": "boolean",
          "readOnly": true
        },
        "restrictedPaymentCountries": {
          "description": "Optional. Countries where the purchase of this subscription is restricted to payment methods registered in the same country. If empty, no payment location restrictions are imposed.",
          "$ref": "RestrictedPaymentCountries"
        }
      },
      "type": "object",
      "description": "A single subscription for an app.",
      "id": "Subscription"
    },
    "CanceledStateContext": {
      "type": "object",
      "description": "Information specific to a subscription in the SUBSCRIPTION_STATE_CANCELED or SUBSCRIPTION_STATE_EXPIRED state.",
      "id": "CanceledStateContext",
      "properties": {
        "developerInitiatedCancellation": {
          "description": "Subscription was canceled by the developer.",
          "$ref": "DeveloperInitiatedCancellation"
        },
        "systemInitiatedCancellation": {
          "description": "Subscription was canceled by the system, for example because of a billing problem.",
          "$ref": "SystemInitiatedCancellation"
        },
        "replacementCancellation": {
          "$ref": "ReplacementCancellation",
          "description": "Subscription was replaced by a new subscription."
        },
        "userInitiatedCancellation": {
          "description": "Subscription was canceled by user.",
          "$ref": "UserInitiatedCancellation"
        }
      }
    },
    "TracksListResponse": {
      "id": "TracksListResponse",
      "properties": {
        "tracks": {
          "type": "array",
          "description": "All tracks (including tracks with no releases).",
          "items": {
            "$ref": "Track"
          }
        },
        "kind": {
          "type": "string",
          "description": "The kind of this response (\"androidpublisher#tracksListResponse\")."
        }
      },
      "type": "object",
      "description": "Response listing all tracks."
    },
    "VoidedPurchase": {
      "id": "VoidedPurchase",
      "type": "object",
      "description": "A VoidedPurchase resource indicates a purchase that was either canceled/refunded/charged-back.",
      "properties": {
        "orderId": {
          "type": "string",
          "description": "The order id which uniquely identifies a one-time purchase, subscription purchase, or subscription renewal."
        },
        "voidedSource": {
          "format": "int32",
          "description": "The initiator of voided purchase, possible values are: 0. User 1. Developer 2. Google",
          "type": "integer"
        },
        "purchaseTimeMillis": {
          "description": "The time at which the purchase was made, in milliseconds since the epoch (Jan 1, 1970).",
          "type": "string",
          "format": "int64"
        },
        "voidedReason": {
          "type": "integer",
          "description": "The reason why the purchase was voided, possible values are: 0. Other 1. Remorse 2. Not_received 3. Defective 4. Accidental_purchase 5. Fraud 6. Friendly_fraud 7. Chargeback 8. Unacknowledged_purchase",
          "format": "int32"
        },
        "kind": {
          "type": "string",
          "description": "This kind represents a voided purchase object in the androidpublisher service."
        },
        "voidedTimeMillis": {
          "type": "string",
          "description": "The time at which the purchase was canceled/refunded/charged-back, in milliseconds since the epoch (Jan 1, 1970).",
          "format": "int64"
        },
        "voidedQuantity": {
          "description": "The voided quantity as the result of a quantity-based partial refund. Voided purchases of quantity-based partial refunds may only be returned when includeQuantityBasedPartialRefund is set to true.",
          "format": "int32",
          "type": "integer"
        },
        "purchaseToken": {
          "description": "The token which uniquely identifies a one-time purchase or subscription. To uniquely identify subscription renewals use order_id (available starting from version 3 of the API).",
          "type": "string"
        }
      }
    },
    "ReplacementCancellation": {
      "id": "ReplacementCancellation",
      "description": "Information specific to cancellations caused by subscription replacement.",
      "type": "object",
      "properties": {}
    },
    "CancelSurveyResult": {
      "id": "CancelSurveyResult",
      "description": "Result of the cancel survey when the subscription was canceled by the user.",
      "properties": {
        "reasonUserInput": {
          "description": "Only set for CANCEL_SURVEY_REASON_OTHERS. This is the user's freeform response to the survey.",
          "type": "string"
        },
        "reason": {
          "type": "string",
          "enum": [
            "CANCEL_SURVEY_REASON_UNSPECIFIED",
            "CANCEL_SURVEY_REASON_NOT_ENOUGH_USAGE",
            "CANCEL_SURVEY_REASON_TECHNICAL_ISSUES",
            "CANCEL_SURVEY_REASON_COST_RELATED",
            "CANCEL_SURVEY_REASON_FOUND_BETTER_APP",
            "CANCEL_SURVEY_REASON_OTHERS"
          ],
          "enumDescriptions": [
            "Unspecified cancel survey reason.",
            "Not enough usage of the subscription.",
            "Technical issues while using the app.",
            "Cost related issues.",
            "The user found a better app.",
            "Other reasons."
          ],
          "description": "The reason the user selected in the cancel survey."
        }
      },
      "type": "object"
    },
    "OrderHistory": {
      "properties": {
        "processedEvent": {
          "$ref": "ProcessedEvent",
          "description": "Details of when the order was processed."
        },
        "partialRefundEvents": {
          "description": "Details of the partial refund events for this order.",
          "items": {
            "$ref": "PartialRefundEvent"
          },
          "type": "array"
        },
        "cancellationEvent": {
          "description": "Details of when the order was canceled.",
          "$ref": "CancellationEvent"
        },
        "refundEvent": {
          "description": "Details of when the order was fully refunded.",
          "$ref": "RefundEvent"
        }
      },
      "description": "Details about events which modified the order.",
      "type": "object",
      "id": "OrderHistory"
    },
    "SchedulePlanTransitionResponse": {
      "id": "SchedulePlanTransitionResponse",
      "type": "object",
      "description": "Response for the purchases.subscriptionsv2.schedulePlanTransition API.",
      "properties": {
        "planTransitionDetails": {
          "description": "The plan transition details of the subscription item.",
          "$ref": "PlanTransitionDetails"
        }
      }
    },
    "PolicyResponse": {
      "properties": {
        "booleanResponse": {
          "description": "Optional. A boolean response.",
          "$ref": "PolicyBooleanResponse"
        },
        "questionId": {
          "type": "string",
          "description": "Required. ID of the question being answered."
        },
        "singleChoiceResponse": {
          "description": "Optional. A single choice response.",
          "$ref": "PolicySingleChoiceResponse"
        },
        "stringResponse": {
          "description": "Optional. A string response.",
          "$ref": "PolicyStringResponse"
        },
        "multipleChoiceResponse": {
          "$ref": "PolicyMultipleChoiceResponse",
          "description": "Optional. A multiple choice response."
        },
        "groupResponse": {
          "description": "Optional. A group response.",
          "$ref": "PolicyGroupResponse"
        },
        "documentResponse": {
          "description": "Optional. A document response.",
          "$ref": "PolicyDocumentResponse"
        },
        "keyedGroupResponse": {
          "$ref": "PolicyKeyedGroupResponse",
          "description": "Optional. A keyed group response."
        }
      },
      "id": "PolicyResponse",
      "type": "object",
      "description": "An individual response (answer) to a policy question about an app."
    },
    "TokenPagination": {
      "description": "Pagination information returned by a List operation when token pagination is enabled. List operations that supports paging return only one \"page\" of results. This protocol buffer message describes the page that has been returned. When using token pagination, clients should use the next/previous token to get another page of the result. The presence or absence of next/previous token indicates whether a next/previous page is available and provides a mean of accessing this page. ListRequest.page_token should be set to either next_page_token or previous_page_token to access another page.",
      "type": "object",
      "properties": {
        "nextPageToken": {
          "description": "Tokens to pass to the standard list field 'page_token'. Whenever available, tokens are preferred over manipulating start_index.",
          "type": "string"
        },
        "previousPageToken": {
          "type": "string"
        }
      },
      "id": "TokenPagination"
    },
    "OneTimeProductDiscountedOffer": {
      "properties": {
        "startTime": {
          "type": "string",
          "description": "Time when the offer will start being available.",
          "format": "google-datetime"
        },
        "redemptionLimit": {
          "description": "Optional. The number of times this offer can be redeemed. If unset or set to 0, allows for unlimited offer redemptions. Otherwise must be a number between 1 and 50 inclusive.",
          "type": "string",
          "format": "int64"
        },
        "endTime": {
          "description": "Time when the offer will stop being available.",
          "type": "string",
          "format": "google-datetime"
        }
      },
      "type": "object",
      "description": "Configuration specific to discounted offers.",
      "id": "OneTimeProductDiscountedOffer"
    },
    "CancelSubscriptionPurchaseResponse": {
      "id": "CancelSubscriptionPurchaseResponse",
      "description": "Response for the purchases.subscriptionsv2.cancel API.",
      "type": "object",
      "properties": {}
    },
    "SubscriptionItemPriceChangeDetails": {
      "properties": {
        "newPrice": {
          "description": "New recurring price for the subscription item.",
          "$ref": "Money"
        },
        "priceChangeState": {
          "type": "string",
          "enum": [
            "PRICE_CHANGE_STATE_UNSPECIFIED",
            "OUTSTANDING",
            "CONFIRMED",
            "APPLIED",
            "CANCELED"
          ],
          "description": "State the price change is currently in.",
          "enumDescriptions": [
            "Price change state unspecified. This value should not be used.",
            "Waiting for the user to agree for the price change.",
            "The price change is confirmed to happen for the user.",
            "The price change is applied, i.e. the user has started being charged the new price.",
            "The price change was canceled."
          ]
        },
        "priceChangeMode": {
          "enumDescriptions": [
            "Price change mode unspecified. This value should never be set.",
            "If the subscription price is decreasing.",
            "If the subscription price is increasing and the user needs to accept it.",
            "If the subscription price is increasing with opt out mode."
          ],
          "enum": [
            "PRICE_CHANGE_MODE_UNSPECIFIED",
            "PRICE_DECREASE",
            "PRICE_INCREASE",
            "OPT_OUT_PRICE_INCREASE"
          ],
          "description": "Price change mode specifies how the subscription item price is changing.",
          "type": "string"
        },
        "expectedNewPriceChargeTime": {
          "description": "The renewal time at which the price change will become effective for the user. This is subject to change(to a future time) due to cases where the renewal time shifts like pause. This field is only populated if the price change has not taken effect.",
          "type": "string",
          "format": "google-datetime"
        }
      },
      "id": "SubscriptionItemPriceChangeDetails",
      "description": "Price change related information of a subscription item.",
      "type": "object"
    },
    "TestPurchase": {
      "id": "TestPurchase",
      "properties": {},
      "type": "object",
      "description": "Whether this subscription purchase is a test purchase."
    },
    "PolicyMultipleChoiceResponse": {
      "type": "object",
      "description": "Any response where multiple options can be chosen from several possibilities.",
      "id": "PolicyMultipleChoiceResponse",
      "properties": {
        "values": {
          "type": "array",
          "description": "Optional. Provided values.",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "VoidedPurchasesListResponse": {
      "description": "Response for the voidedpurchases.list API.",
      "type": "object",
      "properties": {
        "tokenPagination": {
          "description": "Pagination information for token pagination.",
          "$ref": "TokenPagination"
        },
        "pageInfo": {
          "$ref": "PageInfo",
          "description": "General pagination information."
        },
        "voidedPurchases": {
          "type": "array",
          "items": {
            "$ref": "VoidedPurchase"
          }
        }
      },
      "id": "VoidedPurchasesListResponse"
    },
    "InappproductsBatchDeleteRequest": {
      "properties": {
        "requests": {
          "items": {
            "$ref": "InappproductsDeleteRequest"
          },
          "type": "array",
          "description": "Individual delete requests. At least one request is required. Can contain up to 100 requests. All requests must correspond to different in-app products."
        }
      },
      "type": "object",
      "id": "InappproductsBatchDeleteRequest",
      "description": "Request to delete multiple in-app products."
    },
    "GetSubscriptionOfferRequest": {
      "id": "GetSubscriptionOfferRequest",
      "description": "Request message for GetSubscriptionOffer.",
      "type": "object",
      "properties": {
        "basePlanId": {
          "description": "Required. The parent base plan (ID) of the offer to get.",
          "type": "string"
        },
        "offerId": {
          "description": "Required. The unique offer ID of the offer to get.",
          "type": "string"
        },
        "productId": {
          "type": "string",
          "description": "Required. The parent subscription (ID) of the offer to get."
        },
        "packageName": {
          "description": "Required. The parent app (package name) of the offer to get.",
          "type": "string"
        }
      }
    },
    "UpgradeTargetingRule": {
      "id": "UpgradeTargetingRule",
      "type": "object",
      "description": "Represents a targeting rule of the form: User currently has {scope} [with billing period {billing_period}].",
      "properties": {
        "oncePerUser": {
          "type": "boolean",
          "description": "Limit this offer to only once per user. If set to true, a user can never be eligible for this offer again if they ever subscribed to this offer."
        },
        "scope": {
          "description": "Required. The scope of subscriptions this rule considers. Only allows \"this subscription\" and \"specific subscription in app\".",
          "$ref": "TargetingRuleScope"
        },
        "billingPeriodDuration": {
          "description": "The specific billing period duration, specified in ISO 8601 format, that a user must be currently subscribed to to be eligible for this rule. If not specified, users subscribed to any billing period are matched.",
          "type": "string"
        }
      }
    },
    "CancelAppRecoveryResponse": {
      "id": "CancelAppRecoveryResponse",
      "type": "object",
      "description": "Response message for CancelAppRecovery.",
      "properties": {}
    },
    "LocalizedStoreListings": {
      "properties": {
        "localizedStoreListings": {
          "items": {
            "$ref": "LocalizedStoreListing"
          },
          "type": "array"
        },
        "defaultLanguageCode": {
          "description": "The default language code of the app. If a localized store listing is not available for a given language, assets from the default language are used instead.",
          "type": "string"
        }
      },
      "type": "object",
      "id": "LocalizedStoreListings",
      "description": "The localized store listings of an app."
    },
    "VanityCode": {
      "type": "object",
      "description": "A multiple use, predefined promotion code.",
      "properties": {
        "promotionCode": {
          "description": "The promotion code.",
          "type": "string"
        }
      },
      "id": "VanityCode"
    },
    "DeviceId": {
      "description": "Identifier of a device.",
      "id": "DeviceId",
      "type": "object",
      "properties": {
        "buildBrand": {
          "type": "string",
          "description": "Value of Build.BRAND."
        },
        "buildDevice": {
          "type": "string",
          "description": "Value of Build.DEVICE."
        }
      }
    },
    "ListAppRecoveriesResponse": {
      "id": "ListAppRecoveriesResponse",
      "type": "object",
      "description": "Response message for ListAppRecoveries. -- api-linter: core::0158::response-next-page-token-field=disabled",
      "properties": {
        "recoveryActions": {
          "type": "array",
          "description": "List of recovery actions associated with the requested package name.",
          "items": {
            "$ref": "AppRecoveryAction"
          }
        }
      }
    },
    "GeneratedAssetPackSlice": {
      "description": "Download metadata for an asset pack slice.",
      "type": "object",
      "id": "GeneratedAssetPackSlice",
      "properties": {
        "downloadId": {
          "description": "Download ID, which uniquely identifies the APK to download. Should be supplied to `generatedapks.download` method.",
          "type": "string"
        },
        "sliceId": {
          "description": "Asset slice ID.",
          "type": "string"
        },
        "moduleName": {
          "description": "Name of the module that this asset slice belongs to.",
          "type": "string"
        },
        "version": {
          "type": "string",
          "description": "Asset module version.",
          "format": "int64"
        }
      }
    },
    "TextureCompressionFormat": {
      "type": "object",
      "description": "Represents texture compression format.",
      "id": "TextureCompressionFormat",
      "properties": {
        "alias": {
          "description": "Alias for texture compression format.",
          "enum": [
            "UNSPECIFIED_TEXTURE_COMPRESSION_FORMAT",
            "ETC1_RGB8",
            "PALETTED",
            "THREE_DC",
            "ATC",
            "LATC",
            "DXT1",
            "S3TC",
            "PVRTC",
            "ASTC",
            "ETC2"
          ],
          "enumDescriptions": [
            "Unspecified format.",
            "ETC1_RGB8 format.",
            "PALETTED format.",
            "THREE_DC format.",
            "ATC format.",
            "LATC format.",
            "DXT1 format.",
            "S3TC format.",
            "PVRTC format.",
            "ASTC format.",
            "ETC2 format."
          ],
          "type": "string"
        }
      }
    },
    "AppStoreAppStoreListing": {
      "type": "object",
      "properties": {
        "videoLink": {
          "description": "Optional. Link to a video about the app.",
          "type": "string"
        },
        "languageCode": {
          "type": "string",
          "description": "Required. Language code (e.g., \"en-US\") of the listing."
        },
        "appIconId": {
          "description": "Required. Image ID generated from UploadImage for the main app icon.",
          "type": "string"
        },
        "screenshotId": {
          "type": "array",
          "description": "Required. Multiple image IDs for screenshot galleries.",
          "items": {
            "type": "string"
          }
        },
        "appName": {
          "type": "string",
          "description": "Required. The title of the app."
        },
        "shortDescription": {
          "type": "string",
          "description": "Optional. Quick summary about the app."
        },
        "fullDescription": {
          "description": "Required. Comprehensive description text about the app.",
          "type": "string"
        }
      },
      "id": "AppStoreAppStoreListing",
      "description": "A localized store listing. These are the details about the app as shown in your app store."
    },
    "SubscriptionDetails": {
      "id": "SubscriptionDetails",
      "properties": {
        "servicePeriodStartTime": {
          "description": "The start of the billing period funded by this order. This is a snapshot of the billing/service period start time at the moment the order was processed, and should be used only for accounting.",
          "type": "string",
          "format": "google-datetime"
        },
        "basePlanId": {
          "description": "The base plan ID of the subscription.",
          "type": "string"
        },
        "offerPhaseDetails": {
          "description": "The pricing phase details for the entitlement period funded by this order.",
          "$ref": "OfferPhaseDetails"
        },
        "offerId": {
          "type": "string",
          "description": "The offer ID for the current subscription offer."
        },
        "servicePeriodEndTime": {
          "type": "string",
          "description": "The end of the billing period funded by this order. This is a snapshot of the billing/service period end time at the moment the order was processed, and should be used only for accounting. To get the current end time of the subscription service period, use purchases.subscriptionsv2.get.",
          "format": "google-datetime"
        },
        "offerPhase": {
          "description": "Deprecated: Use offer_phase_details instead. The pricing phase for the billing period funded by this order.",
          "deprecated": true,
          "type": "string",
          "enum": [
            "OFFER_PHASE_UNSPECIFIED",
            "BASE",
            "INTRODUCTORY",
            "FREE_TRIAL"
          ],
          "enumDescriptions": [
            "Offer phase unspecified. This value is not used.",
            "The order funds a base price period.",
            "The order funds an introductory pricing period.",
            "The order funds a free trial period."
          ]
        }
      },
      "type": "object",
      "description": "Details of a subscription purchase."
    },
    "ExternalTransactionTestPurchase": {
      "type": "object",
      "description": "Represents a transaction performed using a test account. These transactions will not be charged by Google.",
      "properties": {},
      "id": "ExternalTransactionTestPurchase"
    },
    "CreateAppStoreHostedAppRequest": {
      "type": "object",
      "id": "CreateAppStoreHostedAppRequest",
      "description": "Request to create a new app record for an app store hosted app.",
      "properties": {
        "packageName": {
          "type": "string",
          "description": "Required. Package name of the app."
        }
      }
    },
    "GeneratedStandaloneApk": {
      "type": "object",
      "properties": {
        "downloadId": {
          "type": "string",
          "description": "Download ID, which uniquely identifies the APK to download. Should be supplied to `generatedapks.download` method."
        },
        "variantId": {
          "format": "int32",
          "type": "integer",
          "description": "ID of the generated variant."
        }
      },
      "description": "Download metadata for a standalone APK.",
      "id": "GeneratedStandaloneApk"
    },
    "OrdersReviewRefundRequest": {
      "type": "object",
      "description": "Request for the orders.reviewrefund API.",
      "id": "OrdersReviewRefundRequest",
      "properties": {
        "consumptionUsageEvents": {
          "type": "array",
          "description": "Optional. List of events, each representing an instance where the user consumed or used the purchased item or service. Lists with over 1000 items will be rejected.",
          "items": {
            "$ref": "ConsumptionUsageEvent"
          }
        },
        "sampleContentProvided": {
          "type": "boolean",
          "description": "Required. Indicates whether you provided a free sample, trial, or information about the functionality prior to the purchase."
        },
        "pendingRefundToken": {
          "description": "Required. The pending refund token included in the pending refund review notification.",
          "type": "string"
        },
        "consumptionPercentageMilliunits": {
          "format": "int32",
          "description": "Optional. Percentage of the In-App purchase the customer consumed, in milliunits. Minimum: 0 Maximum: 100,000. For paid apps, this can be omitted. Example : 45200 represents 45.2%.",
          "type": "integer"
        },
        "refundPreference": {
          "type": "string",
          "enumDescriptions": [
            "Refund preference unspecified. This value is not used.",
            "Developer prefers that Play declines the refund.",
            "Developer prefers that Play grants the refund in full.",
            "Developer has no preference about Google Play's decision to issue a refund"
          ],
          "enum": [
            "REFUND_PREFERENCE_UNSPECIFIED",
            "DECLINE",
            "APPROVE",
            "NEUTRAL"
          ],
          "description": "Required. Indicates your preference, based on your operational logic, as to whether the Play Store should grant the refund."
        }
      }
    },
    "RegionalTaxConfig": {
      "description": "Details about taxation in a given geographical region.",
      "properties": {
        "taxTier": {
          "description": "Tax tier to specify reduced tax rate. Developers who sell digital news, magazines, newspapers, books, or audiobooks in various regions may be eligible for reduced tax rates. [Learn more](https://support.google.com/googleplay/android-developer/answer/10463498).",
          "enum": [
            "TAX_TIER_UNSPECIFIED",
            "TAX_TIER_BOOKS_1",
            "TAX_TIER_NEWS_1",
            "TAX_TIER_NEWS_2",
            "TAX_TIER_MUSIC_OR_AUDIO_1",
            "TAX_TIER_LIVE_OR_BROADCAST_1"
          ],
          "type": "string",
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            ""
          ]
        },
        "streamingTaxType": {
          "enum": [
            "STREAMING_TAX_TYPE_UNSPECIFIED",
            "STREAMING_TAX_TYPE_TELCO_VIDEO_RENTAL",
            "STREAMING_TAX_TYPE_TELCO_VIDEO_SALES",
            "STREAMING_TAX_TYPE_TELCO_VIDEO_MULTI_CHANNEL",
            "STREAMING_TAX_TYPE_TELCO_AUDIO_RENTAL",
            "STREAMING_TAX_TYPE_TELCO_AUDIO_SALES",
            "STREAMING_TAX_TYPE_TELCO_AUDIO_MULTI_CHANNEL"
          ],
          "type": "string",
          "enumDescriptions": [
            "No telecommunications tax collected.",
            "US-specific telecommunications tax tier for video streaming, on demand, rentals / subscriptions / pay-per-view.",
            "US-specific telecommunications tax tier for video streaming of pre-recorded content like movies, tv shows.",
            "US-specific telecommunications tax tier for video streaming of multi-channel programming.",
            "US-specific telecommunications tax tier for audio streaming, rental / subscription.",
            "US-specific telecommunications tax tier for audio streaming, sale / permanent download.",
            "US-specific telecommunications tax tier for multi channel audio streaming like radio."
          ],
          "description": "To collect communications or amusement taxes in the United States, choose the appropriate tax category. [Learn more](https://support.google.com/googleplay/android-developer/answer/10463498#streaming_tax)."
        },
        "eligibleForStreamingServiceTaxRate": {
          "type": "boolean",
          "description": "You must tell us if your app contains streaming products to correctly charge US state and local sales tax. Field only supported in the United States."
        },
        "regionCode": {
          "type": "string",
          "description": "Required. Region code this configuration applies to, as defined by ISO 3166-1 alpha-2, e.g. \"US\"."
        }
      },
      "id": "RegionalTaxConfig",
      "type": "object"
    },
    "UploadApkResponse": {
      "id": "UploadApkResponse",
      "description": "Response for uploading an APK.",
      "type": "object",
      "properties": {
        "apkId": {
          "description": "The unique ID of the uploaded APK.",
          "type": "string"
        }
      }
    },
    "DeletePurchaseOptionRequest": {
      "description": "Request message for deleting a purchase option.",
      "id": "DeletePurchaseOptionRequest",
      "properties": {
        "force": {
          "description": "Optional. This field has no effect for purchase options with no offers under them. For purchase options with associated offers: * If `force` is set to false (default), an error will be returned. * If `force` is set to true, any associated offers under the purchase option will be deleted.",
          "type": "boolean"
        },
        "purchaseOptionId": {
          "type": "string",
          "description": "Required. The purchase option ID of the purchase option to delete."
        },
        "packageName": {
          "type": "string",
          "description": "Required. The parent app (package name) of the purchase option to delete."
        },
        "productId": {
          "type": "string",
          "description": "Required. The parent one-time product (ID) of the purchase option to delete."
        },
        "latencyTolerance": {
          "type": "string",
          "enum": [
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
          ],
          "enumDescriptions": [
            "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
            "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
            "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
          ],
          "description": "Optional. The latency tolerance for the propagation of this product update. Defaults to latency-sensitive."
        }
      },
      "type": "object"
    },
    "ApkDescription": {
      "type": "object",
      "properties": {
        "standaloneApkMetadata": {
          "$ref": "StandaloneApkMetadata",
          "description": "Set only for standalone APKs."
        },
        "path": {
          "type": "string",
          "description": "Path of the Apk, will be in the following format: .apk where DownloadId is the ID used to download the apk using GeneratedApks.Download API."
        },
        "splitApkMetadata": {
          "description": "Set only for Split APKs.",
          "$ref": "SplitApkMetadata"
        },
        "assetSliceMetadata": {
          "description": "Set only for asset slices.",
          "$ref": "SplitApkMetadata"
        },
        "instantApkMetadata": {
          "description": "Set only for Instant split APKs.",
          "$ref": "SplitApkMetadata"
        },
        "targeting": {
          "description": "Apk-level targeting.",
          "$ref": "ApkTargeting"
        }
      },
      "id": "ApkDescription",
      "description": "Description of the created apks."
    },
    "UpdateAppStoreHostedAppResponse": {
      "description": "Response for updating an app record for an app store hosted app.",
      "type": "object",
      "id": "UpdateAppStoreHostedAppResponse",
      "properties": {
        "updateId": {
          "description": "Unique identifier for the specific version of the hosted app submitted in this update. This identifier can be used to correlate publishing signals (such as those returned by ListHostedAppsPublishingSignals) with this specific app update.",
          "type": "string"
        }
      }
    },
    "RegionalSubscriptionOfferConfig": {
      "properties": {
        "regionCode": {
          "description": "Required. Immutable. Region code this configuration applies to, as defined by ISO 3166-1 alpha-2, e.g. \"US\".",
          "type": "string"
        },
        "newSubscriberAvailability": {
          "description": "Whether the subscription offer in the specified region is available for new subscribers. Existing subscribers will not have their subscription cancelled if this value is set to false. If not specified, this will default to false.",
          "type": "boolean"
        }
      },
      "id": "RegionalSubscriptionOfferConfig",
      "description": "Configuration for a subscription offer in a single region.",
      "type": "object"
    },
    "DeviceGroup": {
      "description": "A group of devices. A group is defined by a set of device selectors. A device belongs to the group if it matches any selector (logical OR).",
      "properties": {
        "name": {
          "type": "string",
          "description": "The name of the group."
        },
        "deviceSelectors": {
          "description": "Device selectors for this group. A device matching any of the selectors is included in this group.",
          "type": "array",
          "items": {
            "$ref": "DeviceSelector"
          }
        }
      },
      "id": "DeviceGroup",
      "type": "object"
    },
    "PrepaidPlan": {
      "type": "object",
      "description": "Information related to a prepaid plan.",
      "properties": {
        "allowExtendAfterTime": {
          "description": "If present, this is the time after which top up purchases are allowed for the prepaid plan. Will not be present for expired prepaid plans.",
          "type": "string",
          "format": "google-datetime"
        }
      },
      "id": "PrepaidPlan"
    },
    "MultiAbiTargeting": {
      "id": "MultiAbiTargeting",
      "type": "object",
      "properties": {
        "alternatives": {
          "items": {
            "$ref": "MultiAbi"
          },
          "type": "array",
          "description": "Targeting of other sibling directories that were in the Bundle. For main splits this is targeting of other main splits."
        },
        "value": {
          "type": "array",
          "description": "Value of a multi abi.",
          "items": {
            "$ref": "MultiAbi"
          }
        }
      },
      "description": "Targeting based on multiple abis."
    },
    "SubscriptionPurchaseLineItem": {
      "description": "Item-level info for a subscription purchase.",
      "type": "object",
      "properties": {
        "productId": {
          "description": "The purchased product ID (for example, 'monthly001').",
          "type": "string"
        },
        "autoRenewingPlan": {
          "description": "The item is auto renewing.",
          "$ref": "AutoRenewingPlan"
        },
        "latestSuccessfulOrderId": {
          "description": "The order id of the latest successful order associated with this item. Not present if the item is not owned by the user yet (e.g. the item being deferred replaced to).",
          "type": "string"
        },
        "expiryTime": {
          "description": "Time at which the subscription expired or will expire unless the access is extended (ex. renews).",
          "type": "string",
          "format": "google-datetime"
        },
        "offerDetails": {
          "$ref": "OfferDetails",
          "description": "The offer details for this item."
        },
        "prepaidPlan": {
          "description": "The item is prepaid.",
          "$ref": "PrepaidPlan"
        },
        "itemReplacement": {
          "description": "Details of the item being replaced. This field is only populated if this item replaced another item in a previous subscription and is only available for 60 days after the purchase time.",
          "$ref": "ItemReplacement"
        },
        "signupPromotion": {
          "$ref": "SignupPromotion",
          "description": "Promotion details about this item. Only set if a promotion was applied during signup."
        },
        "deferredItemRemoval": {
          "$ref": "DeferredItemRemoval",
          "description": "Information for deferred item removal."
        },
        "deferredItemReplacement": {
          "$ref": "DeferredItemReplacement",
          "description": "Information for deferred item replacement."
        },
        "offerPhase": {
          "$ref": "OfferPhase",
          "description": "Current offer phase details for this item."
        }
      },
      "id": "SubscriptionPurchaseLineItem"
    },
    "InappproductsUpdateRequest": {
      "description": "Request to update an in-app product.",
      "id": "InappproductsUpdateRequest",
      "type": "object",
      "properties": {
        "sku": {
          "type": "string",
          "description": "Unique identifier for the in-app product."
        },
        "packageName": {
          "type": "string",
          "description": "Package name of the app."
        },
        "autoConvertMissingPrices": {
          "type": "boolean",
          "description": "If true the prices for all regions targeted by the parent app that don't have a price specified for this in-app product will be auto converted to the target currency based on the default price. Defaults to false."
        },
        "inappproduct": {
          "$ref": "InAppProduct",
          "description": "The new in-app product."
        },
        "latencyTolerance": {
          "description": "Optional. The latency tolerance for the propagation of this product update. Defaults to latency-sensitive.",
          "type": "string",
          "enumDescriptions": [
            "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
            "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
            "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
          ],
          "enum": [
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
          ]
        },
        "allowMissing": {
          "description": "If set to true, and the in-app product with the given package_name and sku doesn't exist, the in-app product will be created.",
          "type": "boolean"
        }
      }
    },
    "ProrationPeriodOfferPhase": {
      "properties": {
        "originalOfferPhaseType": {
          "type": "string",
          "enumDescriptions": [
            "Unspecified original offer phase type.",
            "The subscription is in the base pricing phase (e.g. full price).",
            "The subscription is in an introductory pricing phase.",
            "The subscription is in a free trial."
          ],
          "enum": [
            "ORIGINAL_OFFER_PHASE_TYPE_UNSPECIFIED",
            "BASE",
            "INTRODUCTORY",
            "FREE_TRIAL"
          ],
          "description": "The original offer phase type before the proration period. Only set when the proration period is updated from an existing offer phase."
        }
      },
      "description": "Details about proration period offer phase.",
      "id": "ProrationPeriodOfferPhase",
      "type": "object"
    },
    "AndroidSdks": {
      "id": "AndroidSdks",
      "properties": {
        "sdkLevels": {
          "items": {
            "format": "int64",
            "type": "string"
          },
          "type": "array",
          "description": "Android api levels of devices targeted by recovery action. See https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels for different api levels in android."
        }
      },
      "description": "Android api level targeting data for app recovery action targeting.",
      "type": "object"
    },
    "AppDetails": {
      "description": "The app details. The resource for DetailsService.",
      "id": "AppDetails",
      "type": "object",
      "properties": {
        "contactWebsite": {
          "type": "string",
          "description": "The user-visible website for this app."
        },
        "defaultLanguage": {
          "description": "Default language code, in BCP 47 format (eg \"en-US\").",
          "type": "string"
        },
        "contactPhone": {
          "description": "The user-visible support telephone number for this app.",
          "type": "string"
        },
        "contactEmail": {
          "description": "The user-visible support email for this app.",
          "type": "string"
        }
      }
    },
    "InstallmentsBasePlanType": {
      "description": "Represents an installments base plan where a user commits to a specified number of payments.",
      "properties": {
        "resubscribeState": {
          "enumDescriptions": [
            "Unspecified state.",
            "Resubscribe is active.",
            "Resubscribe is inactive."
          ],
          "enum": [
            "RESUBSCRIBE_STATE_UNSPECIFIED",
            "RESUBSCRIBE_STATE_ACTIVE",
            "RESUBSCRIBE_STATE_INACTIVE"
          ],
          "description": "Whether users should be able to resubscribe to this base plan in Google Play surfaces. Defaults to RESUBSCRIBE_STATE_ACTIVE if not specified.",
          "type": "string"
        },
        "committedPaymentsCount": {
          "description": "Required. Immutable. The number of payments the user is committed to. It is immutable after the base plan is created.",
          "format": "int32",
          "type": "integer"
        },
        "accountHoldDuration": {
          "type": "string",
          "description": "Optional. Custom account hold period of the subscription, specified in ISO 8601 format. Acceptable values must be in days and between P0D and P60D. An empty field represents a recommended account hold, calculated as 60 days minus grace period. The sum of gracePeriodDuration and accountHoldDuration must be between P30D and P60D days, inclusive."
        },
        "gracePeriodDuration": {
          "type": "string",
          "description": "Grace period of the subscription, specified in ISO 8601 format. Acceptable values must be in days and between P0D and the lesser of 30D and base plan billing period. If not specified, a default value will be used based on the billing period. The sum of gracePeriodDuration and accountHoldDuration must be between P30D and P60D days, inclusive."
        },
        "prorationMode": {
          "enumDescriptions": [
            "Unspecified mode.",
            "Users will be charged for their new base plan at the end of their current billing period.",
            "Users will be charged for their new base plan immediately and in full. Any remaining period of their existing subscription will be used to extend the duration of the new billing plan."
          ],
          "enum": [
            "SUBSCRIPTION_PRORATION_MODE_UNSPECIFIED",
            "SUBSCRIPTION_PRORATION_MODE_CHARGE_ON_NEXT_BILLING_DATE",
            "SUBSCRIPTION_PRORATION_MODE_CHARGE_FULL_PRICE_IMMEDIATELY"
          ],
          "description": "The proration mode for the base plan determines what happens when a user switches to this plan from another base plan. If unspecified, defaults to CHARGE_ON_NEXT_BILLING_DATE.",
          "type": "string"
        },
        "renewalType": {
          "enumDescriptions": [
            "Unspecified state.",
            "Renews periodically for the billing period duration without commitment.",
            "Renews with the commitment of the same duration as the initial one."
          ],
          "description": "Required. Immutable. Installments base plan renewal type. Determines the behavior at the end of the initial commitment. The renewal type is immutable after the base plan is created.",
          "type": "string",
          "enum": [
            "RENEWAL_TYPE_UNSPECIFIED",
            "RENEWAL_TYPE_RENEWS_WITHOUT_COMMITMENT",
            "RENEWAL_TYPE_RENEWS_WITH_COMMITMENT"
          ]
        },
        "billingPeriodDuration": {
          "type": "string",
          "description": "Required. Immutable. Subscription period, specified in ISO 8601 format. For a list of acceptable billing periods, refer to the help center. The duration is immutable after the base plan is created."
        }
      },
      "id": "InstallmentsBasePlanType",
      "type": "object"
    },
    "LanguageTargeting": {
      "type": "object",
      "properties": {
        "alternatives": {
          "description": "Alternative languages.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "value": {
          "description": "ISO-639: 2 or 3 letter language code.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "id": "LanguageTargeting",
      "description": "Targeting based on language."
    },
    "TargetingUpdate": {
      "type": "object",
      "id": "TargetingUpdate",
      "description": "Update type for targeting. Note it is always a subset Targeting.",
      "properties": {
        "androidSdks": {
          "$ref": "AndroidSdks",
          "description": "Additional android sdk levels are targeted by the recovery action."
        },
        "allUsers": {
          "description": "All users are targeted.",
          "$ref": "AllUsers"
        },
        "regions": {
          "description": "Additional regions are targeted by the recovery action.",
          "$ref": "Regions"
        }
      }
    },
    "CancelSubscriptionPurchaseRequest": {
      "type": "object",
      "description": "Request for the purchases.subscriptionsv2.cancel API.",
      "id": "CancelSubscriptionPurchaseRequest",
      "properties": {
        "cancellationContext": {
          "$ref": "CancellationContext",
          "description": "Required. Additional details around the subscription revocation."
        }
      }
    },
    "OtherRegionsSubscriptionOfferPhaseFreePriceOverride": {
      "id": "OtherRegionsSubscriptionOfferPhaseFreePriceOverride",
      "properties": {},
      "type": "object",
      "description": "Represents the free price override configuration for any new locations Play may launch for a single offer phase."
    },
    "ProcessedEvent": {
      "type": "object",
      "properties": {
        "eventTime": {
          "format": "google-datetime",
          "type": "string",
          "description": "The time when the order was processed."
        }
      },
      "id": "ProcessedEvent",
      "description": "Details of when the order was processed."
    },
    "BatchUpdatePurchaseOptionStatesRequest": {
      "description": "Request message for BatchUpdatePurchaseOptionStates.",
      "type": "object",
      "properties": {
        "requests": {
          "items": {
            "$ref": "UpdatePurchaseOptionStateRequest"
          },
          "description": "Required. The update request list of up to 100 elements. All requests must update different purchase options.",
          "type": "array"
        }
      },
      "id": "BatchUpdatePurchaseOptionStatesRequest"
    },
    "GetOneTimeProductOfferRequest": {
      "description": "Request message for GetOneTimeProductOffers.",
      "type": "object",
      "id": "GetOneTimeProductOfferRequest",
      "properties": {
        "productId": {
          "description": "Required. The parent one-time product (ID) of the offer to get.",
          "type": "string"
        },
        "purchaseOptionId": {
          "description": "Required. The parent purchase option (ID) of the offer to get.",
          "type": "string"
        },
        "packageName": {
          "description": "Required. The parent app (package name) of the offer to get.",
          "type": "string"
        },
        "offerId": {
          "description": "Required. The unique offer ID of the offer to get.",
          "type": "string"
        }
      }
    },
    "DeobfuscationFile": {
      "type": "object",
      "description": "Represents a deobfuscation file.",
      "id": "DeobfuscationFile",
      "properties": {
        "symbolType": {
          "enum": [
            "deobfuscationFileTypeUnspecified",
            "proguard",
            "nativeCode"
          ],
          "description": "The type of the deobfuscation file.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified deobfuscation file type.",
            "Proguard deobfuscation file type.",
            "Native debugging symbols file type."
          ]
        }
      }
    },
    "PendingCancellation": {
      "id": "PendingCancellation",
      "type": "object",
      "description": "This is an indicator of whether there is a pending cancellation on the virtual installment plan. The cancellation will happen only after the user finished all committed payments.",
      "properties": {}
    },
    "DeleteOneTimeProductRequest": {
      "description": "Request message for deleting a one-time product.",
      "type": "object",
      "properties": {
        "packageName": {
          "description": "Required. The parent app (package name) of the one-time product to delete.",
          "type": "string"
        },
        "latencyTolerance": {
          "description": "Optional. The latency tolerance for the propagation of this product update. Defaults to latency-sensitive.",
          "enum": [
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
          ],
          "type": "string",
          "enumDescriptions": [
            "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
            "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
            "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
          ]
        },
        "productId": {
          "type": "string",
          "description": "Required. The one-time product ID of the one-time product to delete."
        }
      },
      "id": "DeleteOneTimeProductRequest"
    },
    "MigrateBasePlanPricesRequest": {
      "id": "MigrateBasePlanPricesRequest",
      "type": "object",
      "properties": {
        "productId": {
          "type": "string",
          "description": "Required. The ID of the subscription to update. Must be equal to the product_id field on the Subscription resource."
        },
        "latencyTolerance": {
          "description": "Optional. The latency tolerance for the propagation of this product update. Defaults to latency-sensitive.",
          "enum": [
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
          ],
          "enumDescriptions": [
            "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
            "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
            "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
          ],
          "type": "string"
        },
        "regionsVersion": {
          "description": "Required. The version of the available regions being used for the regional_price_migrations.",
          "$ref": "RegionsVersion"
        },
        "basePlanId": {
          "type": "string",
          "description": "Required. The unique base plan ID of the base plan to update prices on."
        },
        "regionalPriceMigrations": {
          "type": "array",
          "description": "Required. The regional prices to update.",
          "items": {
            "$ref": "RegionalPriceMigrationConfig"
          }
        },
        "packageName": {
          "type": "string",
          "description": "Required. Package name of the parent app. Must be equal to the package_name field on the Subscription resource."
        }
      },
      "description": "Request message for MigrateBasePlanPrices."
    },
    "CreateDraftAppRecoveryRequest": {
      "id": "CreateDraftAppRecoveryRequest",
      "properties": {
        "remoteInAppUpdate": {
          "description": "Action type is remote in-app update. As a consequence of this action, a downloadable recovery module is also created for testing purposes.",
          "$ref": "RemoteInAppUpdate"
        },
        "targeting": {
          "description": "Specifies targeting criteria for the recovery action such as regions, android sdk versions, app versions etc.",
          "$ref": "Targeting"
        }
      },
      "type": "object",
      "description": "Request message for CreateDraftAppRecovery."
    },
    "DeferSubscriptionPurchaseResponse": {
      "description": "Response for the v2 purchases.subscriptions.defer API.",
      "properties": {
        "itemExpiryTimeDetails": {
          "items": {
            "$ref": "ItemExpiryTimeDetails"
          },
          "type": "array",
          "description": "The new expiry time for each subscription items."
        }
      },
      "type": "object",
      "id": "DeferSubscriptionPurchaseResponse"
    },
    "InternalAppSharingArtifact": {
      "properties": {
        "sha256": {
          "type": "string",
          "description": "The sha256 hash of the artifact represented as a lowercase hexadecimal number, matching the output of the sha256sum command."
        },
        "certificateFingerprint": {
          "type": "string",
          "description": "The sha256 fingerprint of the certificate used to sign the generated artifact."
        },
        "downloadUrl": {
          "description": "The download URL generated for the uploaded artifact. Users that are authorized to download can follow the link to the Play Store app to install it.",
          "type": "string"
        }
      },
      "id": "InternalAppSharingArtifact",
      "type": "object",
      "description": "An artifact resource which gets created when uploading an APK or Android App Bundle through internal app sharing."
    },
    "ExternalAccountIds": {
      "type": "object",
      "description": "User account identifier in your app.",
      "id": "ExternalAccountIds",
      "properties": {
        "obfuscatedAccountId": {
          "type": "string",
          "description": "Optional. Specifies an optional obfuscated string that is uniquely associated with the purchaser's user account in your app. If you pass this value, Google Play can use it to detect irregular activity. Do not use this field to store any Personally Identifiable Information (PII) such as emails in cleartext. Attempting to store PII in this field will result in purchases being blocked. Google Play recommends that you use either encryption or a one-way hash to generate an obfuscated identifier to send to Google Play. This identifier is limited to 64 characters. This field can only be set for resubscription purchases. See https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setobfuscatedaccountid to set this field for purchases made using the standard in-app billing flow."
        },
        "obfuscatedProfileId": {
          "description": "Optional. Specifies an optional obfuscated string that is uniquely associated with the purchaser's user profile in your app. If you pass this value, Google Play can use it to detect irregular activity. Do not use this field to store any Personally Identifiable Information (PII) such as emails in cleartext. Attempting to store PII in this field will result in purchases being blocked. Google Play recommends that you use either encryption or a one-way hash to generate an obfuscated identifier to send to Google Play. This identifier is limited to 64 characters. This field can only be set for resubscription purchases. See https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setobfuscatedprofileid to set this field for purchases made using the standard in-app billing flow.",
          "type": "string"
        }
      }
    },
    "RestrictedPaymentCountries": {
      "description": "Countries where the purchase of this product is restricted to payment methods registered in the same country. If empty, no payment location restrictions are imposed.",
      "type": "object",
      "id": "RestrictedPaymentCountries",
      "properties": {
        "regionCodes": {
          "description": "Required. Region codes to impose payment restrictions on, as defined by ISO 3166-1 alpha-2, e.g. \"US\".",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "UpdateBasePlanStateRequest": {
      "type": "object",
      "id": "UpdateBasePlanStateRequest",
      "properties": {
        "deactivateBasePlanRequest": {
          "description": "Deactivates a base plan. Once deactivated, the base plan will become unavailable to new subscribers, but existing subscribers will maintain their subscription",
          "$ref": "DeactivateBasePlanRequest"
        },
        "activateBasePlanRequest": {
          "$ref": "ActivateBasePlanRequest",
          "description": "Activates a base plan. Once activated, base plans will be available to new subscribers."
        }
      },
      "description": "Request message to update the state of a subscription base plan."
    },
    "EnrollAppResponse": {
      "properties": {
        "signingCertificate": {
          "description": "The signing certificate hashes for the app. Always set.",
          "$ref": "CertificateHashes"
        },
        "uploadCertificate": {
          "$ref": "CertificateHashes",
          "description": "The upload certificate hashes for the app. Set iff pem_upload_certificate was set in the request."
        }
      },
      "type": "object",
      "description": "Response to enroll an app into Play signing.",
      "id": "EnrollAppResponse"
    },
    "IntroductoryPriceOfferPhase": {
      "properties": {},
      "id": "IntroductoryPriceOfferPhase",
      "type": "object",
      "description": "Details about introductory price offer phase."
    },
    "RemoteInAppUpdate": {
      "properties": {
        "isRemoteInAppUpdateRequested": {
          "type": "boolean",
          "description": "Required. Set to true if Remote In-App Update action type is needed."
        }
      },
      "type": "object",
      "id": "RemoteInAppUpdate",
      "description": "Object representation for Remote in-app update action type."
    },
    "ExternallyHostedApk": {
      "id": "ExternallyHostedApk",
      "description": "Defines an APK available for this application that is hosted externally and not uploaded to Google Play. This function is only available to organizations using Managed Play whose application is configured to restrict distribution to the organizations.",
      "properties": {
        "fileSha1Base64": {
          "type": "string",
          "description": "The sha1 checksum of this APK, represented as a base64 encoded byte array."
        },
        "fileSha256Base64": {
          "description": "The sha256 checksum of this APK, represented as a base64 encoded byte array.",
          "type": "string"
        },
        "applicationLabel": {
          "type": "string",
          "description": "The application label."
        },
        "minimumSdk": {
          "format": "int32",
          "description": "The minimum SDK targeted by this APK.",
          "type": "integer"
        },
        "packageName": {
          "description": "The package name.",
          "type": "string"
        },
        "fileSize": {
          "type": "string",
          "format": "int64",
          "description": "The file size in bytes of this APK."
        },
        "certificateBase64s": {
          "items": {
            "type": "string"
          },
          "description": "A certificate (or array of certificates if a certificate-chain is used) used to sign this APK, represented as a base64 encoded byte array.",
          "type": "array"
        },
        "versionCode": {
          "description": "The version code of this APK.",
          "type": "integer",
          "format": "int32"
        },
        "externallyHostedUrl": {
          "type": "string",
          "description": "The URL at which the APK is hosted. This must be an https URL."
        },
        "usesPermissions": {
          "type": "array",
          "items": {
            "$ref": "UsesPermission"
          },
          "description": "The permissions requested by this APK."
        },
        "versionName": {
          "description": "The version name of this APK.",
          "type": "string"
        },
        "usesFeatures": {
          "type": "array",
          "description": "The features required by this APK (optional).",
          "items": {
            "type": "string"
          }
        },
        "iconBase64": {
          "type": "string",
          "description": "The icon image from the APK, as a base64 encoded byte array."
        },
        "nativeCodes": {
          "description": "The native code environments supported by this APK (optional).",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "maximumSdk": {
          "description": "The maximum SDK supported by this APK (optional).",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "InappproductsListResponse": {
      "type": "object",
      "description": "Response listing all in-app products.",
      "properties": {
        "inappproduct": {
          "items": {
            "$ref": "InAppProduct"
          },
          "type": "array",
          "description": "All in-app products."
        },
        "pageInfo": {
          "description": "Deprecated and unset.",
          "$ref": "PageInfo",
          "deprecated": true
        },
        "kind": {
          "description": "The kind of this response (\"androidpublisher#inappproductsListResponse\").",
          "type": "string"
        },
        "tokenPagination": {
          "description": "Pagination token, to handle a number of products that is over one page.",
          "$ref": "TokenPagination"
        }
      },
      "id": "InappproductsListResponse"
    },
    "InstallmentPlan": {
      "properties": {
        "subsequentCommittedPaymentsCount": {
          "type": "integer",
          "format": "int32",
          "description": "Total number of payments the user will be committed for after each commitment period. Empty means the installment plan will fall back to a normal auto-renew subscription after initial commitment."
        },
        "pendingCancellation": {
          "description": "If present, this installment plan is pending to be canceled. The cancellation will happen only after the user finished all committed payments.",
          "$ref": "PendingCancellation"
        },
        "initialCommittedPaymentsCount": {
          "format": "int32",
          "description": "Total number of payments the user is initially committed for.",
          "type": "integer"
        },
        "remainingCommittedPaymentsCount": {
          "description": "Total number of committed payments remaining to be paid for in this renewal cycle.",
          "format": "int32",
          "type": "integer"
        }
      },
      "description": "Information to a installment plan.",
      "id": "InstallmentPlan",
      "type": "object"
    },
    "AddTargetingRequest": {
      "properties": {
        "targetingUpdate": {
          "$ref": "TargetingUpdate",
          "description": "Specifies targeting updates such as regions, android sdk versions etc."
        }
      },
      "type": "object",
      "description": "Request message for AddTargeting.",
      "id": "AddTargetingRequest"
    },
    "BatchDeletePurchaseOptionsRequest": {
      "description": "Request message for BatchDeletePurchaseOption.",
      "id": "BatchDeletePurchaseOptionsRequest",
      "type": "object",
      "properties": {
        "requests": {
          "description": "Required. A list of delete requests of up to 100 elements. All requests must delete purchase options from different one-time products.",
          "type": "array",
          "items": {
            "$ref": "DeletePurchaseOptionRequest"
          }
        }
      }
    },
    "OfferTag": {
      "id": "OfferTag",
      "description": "Represents a custom tag specified for a product offer.",
      "properties": {
        "tag": {
          "description": "Must conform with RFC-1034. That is, this string can only contain lower-case letters (a-z), numbers (0-9), and hyphens (-), and be at most 20 characters.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "TrackConfig": {
      "description": "Configurations of the new track.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "TRACK_TYPE_UNSPECIFIED",
            "CLOSED_TESTING"
          ],
          "description": "Required. Type of the new track. Currently, the only supported value is closedTesting.",
          "enumDescriptions": [
            "Fallback value, do not use.",
            "Closed testing track."
          ]
        },
        "track": {
          "type": "string",
          "description": "Required. Identifier of the new track. For default tracks, this field consists of the track alias only. Form factor tracks have a special prefix as an identifier, for example `wear:production`, `automotive:production`. This prefix must match the value of the `form_factor` field, if it is not a default track. [More on track name](https://developers.google.com/android-publisher/tracks#ff-track-name)"
        },
        "formFactor": {
          "enumDescriptions": [
            "Fallback value, do not use.",
            "Default track.",
            "Wear form factor track.",
            "Automotive form factor track."
          ],
          "type": "string",
          "enum": [
            "FORM_FACTOR_UNSPECIFIED",
            "DEFAULT",
            "WEAR",
            "AUTOMOTIVE"
          ],
          "description": "Required. Form factor of the new track. Defaults to the default track."
        }
      },
      "id": "TrackConfig",
      "type": "object"
    },
    "PreorderOfferDetails": {
      "description": "Offer details information related to a preorder line item.",
      "properties": {
        "preorderReleaseTime": {
          "description": "The time when a preordered item is released for a preorder purchase.",
          "type": "string",
          "format": "google-datetime"
        }
      },
      "id": "PreorderOfferDetails",
      "type": "object"
    },
    "EnrollNewApp": {
      "description": "Enroll a new app into Play signing.",
      "type": "object",
      "id": "EnrollNewApp",
      "properties": {
        "cloudKmsKeyAndCert": {
          "description": "Required. Self-hosted key. Once enrolled, this key will be used to sign your app.",
          "$ref": "CloudKmsKeyAndCert"
        }
      }
    },
    "ReviewsListResponse": {
      "properties": {
        "tokenPagination": {
          "description": "Pagination token, to handle a number of products that is over one page.",
          "$ref": "TokenPagination"
        },
        "pageInfo": {
          "$ref": "PageInfo",
          "description": "Information about the current page."
        },
        "reviews": {
          "items": {
            "$ref": "Review"
          },
          "description": "List of reviews.",
          "type": "array"
        }
      },
      "description": "Response listing reviews.",
      "type": "object",
      "id": "ReviewsListResponse"
    },
    "FreeTrialOfferPhase": {
      "id": "FreeTrialOfferPhase",
      "properties": {},
      "description": "Details about free trial offer phase.",
      "type": "object"
    },
    "GeneratedUniversalApk": {
      "description": "Download metadata for a universal APK.",
      "type": "object",
      "id": "GeneratedUniversalApk",
      "properties": {
        "downloadId": {
          "description": "Download ID, which uniquely identifies the APK to download. Should be supplied to `generatedapks.download` method.",
          "type": "string"
        }
      }
    },
    "PartialRefundEvent": {
      "type": "object",
      "id": "PartialRefundEvent",
      "properties": {
        "createTime": {
          "description": "The time when the partial refund was created.",
          "type": "string",
          "format": "google-datetime"
        },
        "state": {
          "type": "string",
          "description": "The state of the partial refund.",
          "enumDescriptions": [
            "State unspecified. This value is not used.",
            "The partial refund has been created, but not yet processed.",
            "The partial refund was processed successfully."
          ],
          "enum": [
            "STATE_UNSPECIFIED",
            "PENDING",
            "PROCESSED_SUCCESSFULLY"
          ]
        },
        "refundDetails": {
          "description": "Details for the partial refund.",
          "$ref": "RefundDetails"
        },
        "processTime": {
          "type": "string",
          "description": "The time when the partial refund was processed.",
          "format": "google-datetime"
        }
      },
      "description": "Details of the partial refund events for this order."
    },
    "DeveloperComment": {
      "id": "DeveloperComment",
      "description": "Developer entry from conversation between user and developer.",
      "type": "object",
      "properties": {
        "text": {
          "type": "string",
          "description": "The content of the comment, i.e. reply body."
        },
        "lastModified": {
          "description": "The last time at which this comment was updated.",
          "$ref": "Timestamp"
        }
      }
    },
    "RecurringExternalTransaction": {
      "properties": {
        "migratedTransactionProgram": {
          "description": "Input only. Provided during the call to Create. Must only be used when migrating a subscription from manual monthly reporting to automated reporting.",
          "enumDescriptions": [
            "Unspecified transaction program. Not used.",
            "User choice billing, where a user may choose between Google Play Billing developer-managed billing.",
            "Alternative billing only, where users may only use developer-manager billing."
          ],
          "type": "string",
          "enum": [
            "EXTERNAL_TRANSACTION_PROGRAM_UNSPECIFIED",
            "USER_CHOICE_BILLING",
            "ALTERNATIVE_BILLING_ONLY"
          ]
        },
        "otherRecurringProduct": {
          "$ref": "OtherRecurringProduct",
          "description": "Details of a recurring external transaction product which doesn't belong to any other specific category."
        },
        "initialExternalTransactionId": {
          "type": "string",
          "description": "The external transaction id of the first transaction of this recurring series of transactions. For example, for a subscription this would be the transaction id of the first payment. Required when creating recurring external transactions."
        },
        "externalTransactionToken": {
          "description": "Input only. Provided during the call to Create. Retrieved from the client when the alternative billing flow is launched. Required only for the initial purchase.",
          "type": "string"
        },
        "externalSubscription": {
          "description": "Details of an external subscription.",
          "$ref": "ExternalSubscription"
        }
      },
      "id": "RecurringExternalTransaction",
      "description": "Represents a transaction that is part of a recurring series of payments. This can be a subscription or a one-time product with multiple payments (such as preorder).",
      "type": "object"
    },
    "SystemFeature": {
      "description": "Representation of a system feature.",
      "type": "object",
      "id": "SystemFeature",
      "properties": {
        "name": {
          "description": "The name of the feature.",
          "type": "string"
        }
      }
    },
    "OutOfAppPurchaseContext": {
      "id": "OutOfAppPurchaseContext",
      "type": "object",
      "description": "Information specific to an out of app purchase.",
      "properties": {
        "expiredExternalAccountIdentifiers": {
          "$ref": "ExternalAccountIdentifiers",
          "description": "User account identifier from the last expired subscription for this SKU."
        },
        "expiredPurchaseToken": {
          "description": "The purchase token of the last expired subscription. This purchase token must only be used to help identify the user if the link between the purchaseToken and user is stored in your database. This cannot be used to call the Google Developer API if it has been more than 60 days since expiry.",
          "type": "string"
        }
      }
    },
    "BatchUpdateSubscriptionsResponse": {
      "description": "Response message for BatchUpdateSubscription.",
      "id": "BatchUpdateSubscriptionsResponse",
      "properties": {
        "subscriptions": {
          "items": {
            "$ref": "Subscription"
          },
          "description": "The updated subscriptions list.",
          "type": "array"
        }
      },
      "type": "object"
    },
    "DeviceCompatibilityRequirements": {
      "type": "object",
      "id": "DeviceCompatibilityRequirements",
      "description": "Defines a set of device compatibility requirements for the app. A device must satisfy all of the requirements in a set to be considered compatible with the app.",
      "properties": {
        "supportedScreens": {
          "description": "Compatible screens as listed in the `supports-screens` Manifest tag.",
          "type": "array",
          "items": {
            "enumDescriptions": [
              "Unspecified screen size.",
              "Small screen size.",
              "Normal screen size.",
              "Large screen size.",
              "Extra large screen size."
            ],
            "type": "string",
            "enum": [
              "SCREEN_SIZE_UNSPECIFIED",
              "SCREEN_SIZE_SMALL",
              "SCREEN_SIZE_NORMAL",
              "SCREEN_SIZE_LARGE",
              "SCREEN_SIZE_EXTRA_LARGE"
            ]
          }
        },
        "use32BitAbi": {
          "enum": [
            "USE_32_BIT_ABI_UNSPECIFIED",
            "USE_32_BIT_ABI_TRUE",
            "USE_32_BIT_ABI_OTHER"
          ],
          "type": "string",
          "enumDescriptions": [
            "Unspecified 32-bit ABI usage.",
            "Value of use32BitAbi is set to \"true\".",
            "Value of use32BitAbi is not set or set to something other than \"true\"."
          ],
          "description": "Value of `android:use32BitAbi` flag retrieved from the Manifest."
        },
        "isScreenRequired": {
          "description": "Specifies if the app requires a screen.",
          "type": "boolean"
        },
        "glEsVersion": {
          "type": "integer",
          "description": "Required version of OpenGL ES.",
          "format": "int32"
        },
        "compatibleScreens": {
          "type": "array",
          "description": "Compatible screens as listed in the `compatible-screens` Manifest tag.",
          "items": {
            "$ref": "CompatibleScreen"
          }
        },
        "sdkVersion": {
          "description": "Defines a range of SDK versions that the app is compatible with.",
          "$ref": "CatalogSdkVersion"
        },
        "requiredSoftwareLibraries": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "List of required libraries as declared in the `uses-library` manifest tag."
        },
        "supportedGlTextures": {
          "description": "Supported gl textures as specified by the `supported-gl-texture` Manifest tag.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "requiresSmallestWidthDp": {
          "description": "Specifies the minimum smallest width required of the screen.",
          "type": "string",
          "format": "int64"
        },
        "requiredSystemFeatures": {
          "items": {
            "type": "string"
          },
          "type": "array",
          "description": "The system features that the app requires. A device must have all of the system features to be considered compatible with the app."
        },
        "nativePlatforms": {
          "description": "List of required ABIs (Application Binary Interface), e.g. `armeabi` or `x86`.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "usesConfigurations": {
          "type": "array",
          "items": {
            "$ref": "UsesConfiguration"
          },
          "description": "Lists all configurations marked as required by use of the `uses-configuration` manifest tag. Each instance of this proto represents a single `uses-configuration` entry. See http://developer.android.com/guide/topics/manifest/uses-configuration-element.html"
        }
      }
    },
    "SubscriptionTaxAndComplianceSettings": {
      "id": "SubscriptionTaxAndComplianceSettings",
      "description": "Details about taxation, Google Play policy, and legal compliance for subscription products.",
      "properties": {
        "productTaxCategoryCode": {
          "description": "Product tax category code to assign to the subscription. Product tax category determines the transaction tax rates applied to the subscription. Refer to the [Help Center article](https://support.google.com/googleplay/android-developer/answer/16408159) for more information.",
          "type": "string"
        },
        "taxRateInfoByRegionCode": {
          "additionalProperties": {
            "$ref": "RegionalTaxRateInfo"
          },
          "description": "A mapping from region code to tax rate details. The keys are region codes as defined by Unicode's \"CLDR\".",
          "type": "object"
        },
        "eeaWithdrawalRightType": {
          "enum": [
            "WITHDRAWAL_RIGHT_TYPE_UNSPECIFIED",
            "WITHDRAWAL_RIGHT_DIGITAL_CONTENT",
            "WITHDRAWAL_RIGHT_SERVICE"
          ],
          "type": "string",
          "enumDescriptions": [
            "",
            "",
            ""
          ],
          "description": "Digital content or service classification for products distributed to users in the European Economic Area (EEA). The withdrawal regime under EEA consumer laws depends on this classification. Refer to the [Help Center article](https://support.google.com/googleplay/android-developer/answer/10463498) for more information."
        },
        "regionalProductAgeRatingInfos": {
          "type": "array",
          "description": "Regional age rating information. Currently this field is only supported for region code `US`.",
          "items": {
            "$ref": "RegionalProductAgeRatingInfo"
          }
        },
        "isTokenizedDigitalAsset": {
          "type": "boolean",
          "description": "Whether this subscription is declared as a product representing a tokenized digital asset."
        }
      },
      "type": "object"
    },
    "RegionalSubscriptionOfferPhaseConfig": {
      "description": "Configuration for a single phase of a subscription offer in a single region.",
      "id": "RegionalSubscriptionOfferPhaseConfig",
      "type": "object",
      "properties": {
        "regionCode": {
          "type": "string",
          "description": "Required. Immutable. The region to which this config applies."
        },
        "absoluteDiscount": {
          "$ref": "Money",
          "description": "The absolute amount of money subtracted from the base plan price prorated over the phase duration. For example, if the base plan price for this region is $12 for a period of 1 year, then a $1 absolute discount for a phase of a duration of 3 months would correspond to a price of $2. The resulting price may not be smaller than the minimum price allowed for this region."
        },
        "price": {
          "$ref": "Money",
          "description": "The absolute price the user pays for this offer phase. The price must not be smaller than the minimum price allowed for this region."
        },
        "free": {
          "$ref": "RegionalSubscriptionOfferPhaseFreePriceOverride",
          "description": "Set to specify this offer is free to obtain."
        },
        "relativeDiscount": {
          "format": "double",
          "type": "number",
          "description": "The percentage discount subtracted from the base plan price prorated over the phase duration, specified as a fraction strictly larger than `0` and strictly smaller than `1`. For example, a value of `0.8` represents an 80% discount, meaning that if the prorated base plan price is $100, the offer price will be $20. The resulting price will be rounded to the nearest billable unit (e.g. cents for USD). The relative discount is considered invalid if the discounted price ends up being smaller than the minimum price allowed in this region."
        }
      }
    },
    "SubscriptionOfferPhase": {
      "description": "A single phase of a subscription offer.",
      "id": "SubscriptionOfferPhase",
      "properties": {
        "otherRegionsConfig": {
          "description": "Pricing information for any new locations Play may launch in.",
          "$ref": "OtherRegionsSubscriptionOfferPhaseConfig"
        },
        "duration": {
          "type": "string",
          "description": "Required. The duration of a single recurrence of this phase. Specified in ISO 8601 format."
        },
        "regionalConfigs": {
          "description": "Required. The region-specific configuration of this offer phase. This list must contain exactly one entry for each region for which the subscription offer has a regional config.",
          "type": "array",
          "items": {
            "$ref": "RegionalSubscriptionOfferPhaseConfig"
          }
        },
        "recurrenceCount": {
          "type": "integer",
          "description": "Required. The number of times this phase repeats. If this offer phase is not free, each recurrence charges the user the price of this offer phase.",
          "format": "int32"
        }
      },
      "type": "object"
    },
    "OnHoldStateContext": {
      "type": "object",
      "id": "OnHoldStateContext",
      "properties": {
        "renewalDeclined": {
          "$ref": "RenewalDeclinedContext",
          "description": "Optional. The payment for the renewal was declined."
        }
      },
      "description": "Additional context around subscriptions in ON_HOLD state."
    },
    "TargetingInfo": {
      "type": "object",
      "id": "TargetingInfo",
      "properties": {
        "assetSliceSet": {
          "items": {
            "$ref": "AssetSliceSet"
          },
          "description": "List of created asset slices.",
          "type": "array"
        },
        "variant": {
          "type": "array",
          "items": {
            "$ref": "SplitApkVariant"
          },
          "description": "List of the created variants."
        },
        "packageName": {
          "description": "The package name of this app.",
          "type": "string"
        }
      },
      "description": "Targeting information about the generated apks."
    },
    "ProductPurchase": {
      "id": "ProductPurchase",
      "type": "object",
      "description": "A ProductPurchase resource indicates the status of a user's inapp product purchase.",
      "properties": {
        "purchaseState": {
          "type": "integer",
          "description": "The purchase state of the order. Possible values are: 0. Purchased 1. Canceled 2. Pending",
          "format": "int32"
        },
        "consumptionState": {
          "description": "The consumption state of the inapp product. Possible values are: 0. Yet to be consumed 1. Consumed",
          "format": "int32",
          "type": "integer"
        },
        "developerPayload": {
          "type": "string",
          "description": "A developer-specified string that contains supplemental information about an order."
        },
        "kind": {
          "description": "This kind represents an inappPurchase object in the androidpublisher service.",
          "type": "string"
        },
        "acknowledgementState": {
          "type": "integer",
          "description": "The acknowledgement state of the inapp product. Possible values are: 0. Yet to be acknowledged 1. Acknowledged",
          "format": "int32"
        },
        "quantity": {
          "format": "int32",
          "type": "integer",
          "description": "The quantity associated with the purchase of the inapp product. If not present, the quantity is 1."
        },
        "purchaseToken": {
          "type": "string",
          "description": "The purchase token generated to identify this purchase. May not be present."
        },
        "purchaseTimeMillis": {
          "description": "The time the product was purchased, in milliseconds since the epoch (Jan 1, 1970).",
          "type": "string",
          "format": "int64"
        },
        "obfuscatedExternalAccountId": {
          "type": "string",
          "description": "An obfuscated version of the id that is uniquely associated with the user's account in your app. Only present if specified using https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setobfuscatedaccountid when the purchase was made."
        },
        "orderId": {
          "description": "The order id associated with the purchase of the inapp product.",
          "type": "string"
        },
        "regionCode": {
          "type": "string",
          "description": "ISO 3166-1 alpha-2 billing region code of the user at the time the product was granted."
        },
        "obfuscatedExternalProfileId": {
          "description": "An obfuscated version of the id that is uniquely associated with the user'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.",
          "type": "string"
        },
        "refundableQuantity": {
          "type": "integer",
          "description": "The quantity eligible for refund, i.e. quantity that hasn't been refunded. The value reflects quantity-based partial refunds and full refunds.",
          "format": "int32"
        },
        "productId": {
          "description": "The inapp product SKU. May not be present.",
          "type": "string"
        },
        "purchaseType": {
          "format": "int32",
          "type": "integer",
          "description": "The type of purchase of the inapp product. 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). Does not include Play Points purchases. 2. Rewarded (i.e. from watching a video ad instead of paying)"
        }
      }
    },
    "OfferPhaseDetails": {
      "type": "object",
      "properties": {
        "prorationPeriodDetails": {
          "description": "The order funds a proration period.",
          "$ref": "ProrationPeriodDetails"
        },
        "baseDetails": {
          "$ref": "BaseDetails",
          "description": "The order funds a base price period."
        },
        "introductoryPriceDetails": {
          "description": "The order funds an introductory pricing period.",
          "$ref": "IntroductoryPriceDetails"
        },
        "freeTrialDetails": {
          "description": "The order funds a free trial period.",
          "$ref": "FreeTrialDetails"
        }
      },
      "description": "Details of a pricing phase for the entitlement period funded by this order.",
      "id": "OfferPhaseDetails"
    },
    "DeferSubscriptionPurchaseRequest": {
      "type": "object",
      "properties": {
        "deferralContext": {
          "description": "Required. Details about the subscription deferral.",
          "$ref": "DeferralContext"
        }
      },
      "description": "Request for the v2 purchases.subscriptions.defer API.",
      "id": "DeferSubscriptionPurchaseRequest"
    },
    "OneTimeProductOffer": {
      "properties": {
        "discountedOffer": {
          "$ref": "OneTimeProductDiscountedOffer",
          "description": "A discounted offer."
        },
        "regionalPricingAndAvailabilityConfigs": {
          "description": "Set of regional pricing and availability information for this offer. Must not have duplicate entries with the same region_code.",
          "type": "array",
          "items": {
            "$ref": "OneTimeProductOfferRegionalPricingAndAvailabilityConfig"
          }
        },
        "offerTags": {
          "items": {
            "$ref": "OfferTag"
          },
          "type": "array",
          "description": "Optional. List of up to 20 custom tags specified for this offer, and returned to the app through the billing library."
        },
        "preOrderOffer": {
          "$ref": "OneTimeProductPreOrderOffer",
          "description": "A pre-order offer."
        },
        "state": {
          "description": "Output only. The current state of this offer. This field cannot be changed by updating the resource. Use the dedicated endpoints instead.",
          "readOnly": true,
          "enumDescriptions": [
            "Default value, should never be used.",
            "The offer is not and has never been available to users.",
            "The offer is available to users, as long as its conditions are met.",
            "This state is specific to pre-orders. The offer is cancelled and not available to users. All pending orders related to this offer were cancelled.",
            "This state is specific to discounted and game reward offers. The offer is no longer available to users."
          ],
          "enum": [
            "STATE_UNSPECIFIED",
            "DRAFT",
            "ACTIVE",
            "CANCELLED",
            "INACTIVE"
          ],
          "type": "string"
        },
        "productId": {
          "description": "Required. Immutable. The ID of the parent product this offer belongs to.",
          "type": "string"
        },
        "gameRewardOffer": {
          "description": "A game reward offer.",
          "$ref": "OneTimeProductGameRewardOffer"
        },
        "offerId": {
          "description": "Required. Immutable. The ID of this product offer. Must be unique within the purchase option. It must start with a number or lower-case letter, and can only contain lower-case letters (a-z), numbers (0-9), and hyphens (-). The maximum length is 63 characters.",
          "type": "string"
        },
        "purchaseOptionId": {
          "type": "string",
          "description": "Required. Immutable. The ID of the purchase option to which this offer is an extension."
        },
        "regionsVersion": {
          "description": "Output only. The version of the regions configuration that was used to generate the one-time product offer.",
          "readOnly": true,
          "$ref": "RegionsVersion"
        },
        "packageName": {
          "type": "string",
          "description": "Required. Immutable. The package name of the app the parent product belongs to."
        }
      },
      "description": "A single offer for a one-time product.",
      "type": "object",
      "id": "OneTimeProductOffer"
    },
    "BatchUpdateSubscriptionOffersResponse": {
      "description": "Response message for BatchUpdateSubscriptionOffers.",
      "properties": {
        "subscriptionOffers": {
          "items": {
            "$ref": "SubscriptionOffer"
          },
          "description": "The updated subscription offers list.",
          "type": "array"
        }
      },
      "type": "object",
      "id": "BatchUpdateSubscriptionOffersResponse"
    },
    "ApksAddExternallyHostedRequest": {
      "type": "object",
      "description": "Request to create a new externally hosted APK.",
      "id": "ApksAddExternallyHostedRequest",
      "properties": {
        "externallyHostedApk": {
          "description": "The definition of the externally-hosted APK and where it is located.",
          "$ref": "ExternallyHostedApk"
        }
      }
    },
    "UserCountriesTargeting": {
      "type": "object",
      "properties": {
        "countryCodes": {
          "type": "array",
          "description": "List of country codes in the two-letter CLDR territory format.",
          "items": {
            "type": "string"
          }
        },
        "exclude": {
          "type": "boolean",
          "description": "Indicates if the list above is exclusive."
        }
      },
      "id": "UserCountriesTargeting",
      "description": "Describes an inclusive/exclusive list of country codes that module targets."
    },
    "InappproductsBatchUpdateResponse": {
      "type": "object",
      "description": "Response for a batch in-app product update.",
      "properties": {
        "inappproducts": {
          "items": {
            "$ref": "InAppProduct"
          },
          "description": "The updated or inserted in-app products.",
          "type": "array"
        }
      },
      "id": "InappproductsBatchUpdateResponse"
    },
    "SubscriptionOfferTargeting": {
      "description": "Defines the rule a user needs to satisfy to receive this offer.",
      "id": "SubscriptionOfferTargeting",
      "properties": {
        "upgradeRule": {
          "description": "Offer targeting rule for upgrading users' existing plans.",
          "$ref": "UpgradeTargetingRule"
        },
        "acquisitionRule": {
          "description": "Offer targeting rule for new user acquisition.",
          "$ref": "AcquisitionTargetingRule"
        }
      },
      "type": "object"
    },
    "InAppProduct": {
      "id": "InAppProduct",
      "properties": {
        "packageName": {
          "type": "string",
          "description": "Package name of the parent app."
        },
        "defaultLanguage": {
          "description": "Default language of the localized data, as defined by BCP-47. e.g. \"en-US\".",
          "type": "string"
        },
        "gracePeriod": {
          "type": "string",
          "description": "Deprecated: Subscriptions are no longer supported in the InAppProducts API. Use the Subscriptions API instead.",
          "deprecated": true
        },
        "subscriptionTaxesAndComplianceSettings": {
          "description": "Deprecated: Subscriptions are no longer supported in the InAppProducts API. Use the Subscriptions API instead.",
          "$ref": "SubscriptionTaxAndComplianceSettings",
          "deprecated": true
        },
        "listings": {
          "description": "List of localized title and description data. Map key is the language of the localized data, as defined by BCP-47, e.g. \"en-US\".",
          "type": "object",
          "additionalProperties": {
            "$ref": "InAppProductListing"
          }
        },
        "status": {
          "description": "The status of the product, e.g. whether it's active.",
          "type": "string",
          "enum": [
            "statusUnspecified",
            "active",
            "inactive"
          ],
          "enumDescriptions": [
            "Unspecified status.",
            "The product is published and active in the store.",
            "The product is not published and therefore inactive in the store."
          ]
        },
        "managedProductTaxesAndComplianceSettings": {
          "description": "Details about taxes and legal compliance. Only applicable to managed products.",
          "$ref": "ManagedProductTaxAndComplianceSettings"
        },
        "defaultPrice": {
          "description": "Default price. Cannot be zero, as in-app products are never free. Always in the developer's Checkout merchant currency.",
          "$ref": "Price"
        },
        "prices": {
          "description": "Prices per buyer region. None of these can be zero, as in-app products are never free. Map key is region code, as defined by ISO 3166-1 alpha-2.",
          "additionalProperties": {
            "$ref": "Price"
          },
          "type": "object"
        },
        "purchaseType": {
          "enumDescriptions": [
            "Unspecified purchase type.",
            "The default product type - one time purchase.",
            "Deprecated: Subscriptions are no longer supported in the InAppProducts API. Use the Subscriptions API instead."
          ],
          "description": "The type of the product, e.g. a recurring subscription.",
          "type": "string",
          "enumDeprecated": [
            false,
            false,
            true
          ],
          "enum": [
            "purchaseTypeUnspecified",
            "managedUser",
            "subscription"
          ]
        },
        "trialPeriod": {
          "description": "Deprecated: Subscriptions are no longer supported in the InAppProducts API. Use the Subscriptions API instead.",
          "type": "string",
          "deprecated": true
        },
        "sku": {
          "description": "Stock-keeping-unit (SKU) of the product, unique within an app.",
          "type": "string"
        },
        "subscriptionPeriod": {
          "deprecated": true,
          "description": "Deprecated: Subscriptions are no longer supported in the InAppProducts API. Use the Subscriptions API instead.",
          "type": "string"
        }
      },
      "description": "An in-app product. The resource for InappproductsService.",
      "type": "object"
    },
    "AppVersionRange": {
      "type": "object",
      "description": "Data format for a continuous range of app versions.",
      "id": "AppVersionRange",
      "properties": {
        "versionCodeEnd": {
          "format": "int64",
          "description": "Highest app version in the range, inclusive.",
          "type": "string"
        },
        "versionCodeStart": {
          "type": "string",
          "format": "int64",
          "description": "Lowest app version in the range, inclusive."
        }
      }
    },
    "UserComment": {
      "description": "User entry from conversation between user and developer.",
      "properties": {
        "reviewerLanguage": {
          "description": "Language code for the reviewer. This is taken from the device settings so is not guaranteed to match the language the review is written in. May be absent.",
          "type": "string"
        },
        "appVersionCode": {
          "type": "integer",
          "description": "Integer version code of the app as installed at the time the review was written. May be absent.",
          "format": "int32"
        },
        "deviceMetadata": {
          "$ref": "DeviceMetadata",
          "description": "Information about the characteristics of the user's device."
        },
        "text": {
          "description": "The content of the comment, i.e. review body. In some cases users have been able to write a review with separate title and body; in those cases the title and body are concatenated and separated by a tab character.",
          "type": "string"
        },
        "starRating": {
          "type": "integer",
          "format": "int32",
          "description": "The star rating associated with the review, from 1 to 5."
        },
        "appVersionName": {
          "description": "String version name of the app as installed at the time the review was written. May be absent.",
          "type": "string"
        },
        "thumbsDownCount": {
          "format": "int32",
          "description": "Number of users who have given this review a thumbs down.",
          "type": "integer"
        },
        "device": {
          "description": "Codename for the reviewer's device, e.g. klte, flounder. May be absent.",
          "type": "string"
        },
        "androidOsVersion": {
          "description": "Integer Android SDK version of the user's device at the time the review was written, e.g. 23 is Marshmallow. May be absent.",
          "format": "int32",
          "type": "integer"
        },
        "thumbsUpCount": {
          "format": "int32",
          "type": "integer",
          "description": "Number of users who have given this review a thumbs up."
        },
        "lastModified": {
          "$ref": "Timestamp",
          "description": "The last time at which this comment was updated."
        },
        "originalText": {
          "description": "Untranslated text of the review, where the review was translated. If the review was not translated this is left blank.",
          "type": "string"
        }
      },
      "type": "object",
      "id": "UserComment"
    },
    "DeviceFeature": {
      "id": "DeviceFeature",
      "description": "Represents a device feature.",
      "properties": {
        "featureVersion": {
          "format": "int32",
          "description": "The feature version specified by android:glEsVersion or android:version in in the AndroidManifest.",
          "type": "integer"
        },
        "featureName": {
          "type": "string",
          "description": "Name of the feature."
        }
      },
      "type": "object"
    },
    "Track": {
      "description": "A track configuration. The resource for TracksService.",
      "type": "object",
      "properties": {
        "track": {
          "type": "string",
          "description": "Identifier of the track. Form factor tracks have a special prefix as an identifier, for example `wear:production`, `automotive:production`. [More on track name](https://developers.google.com/android-publisher/tracks#ff-track-name)"
        },
        "releases": {
          "description": "In a read request, represents all active releases in the track. In an update request, represents desired changes.",
          "items": {
            "$ref": "TrackRelease"
          },
          "type": "array"
        }
      },
      "id": "Track"
    },
    "DeactivateBasePlanRequest": {
      "properties": {
        "packageName": {
          "description": "Required. The parent app (package name) of the base plan to deactivate.",
          "type": "string"
        },
        "productId": {
          "description": "Required. The parent subscription (ID) of the base plan to deactivate.",
          "type": "string"
        },
        "latencyTolerance": {
          "enum": [
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
          ],
          "enumDescriptions": [
            "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
            "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
            "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
          ],
          "type": "string",
          "description": "Optional. The latency tolerance for the propagation of this product update. Defaults to latency-sensitive."
        },
        "basePlanId": {
          "type": "string",
          "description": "Required. The unique base plan ID of the base plan to deactivate."
        }
      },
      "description": "Request message for DeactivateBasePlan.",
      "id": "DeactivateBasePlanRequest",
      "type": "object"
    },
    "DeviceSelector": {
      "type": "object",
      "id": "DeviceSelector",
      "description": "Selector for a device group. A selector consists of a set of conditions on the device that should all match (logical AND) to determine a device group eligibility. For instance, if a selector specifies RAM conditions, device model inclusion and device model exclusion, a device is considered to match if: device matches RAM conditions AND device matches one of the included device models AND device doesn't match excluded device models",
      "properties": {
        "includedDeviceIds": {
          "type": "array",
          "description": "Device models included by this selector.",
          "items": {
            "$ref": "DeviceId"
          }
        },
        "excludedDeviceIds": {
          "description": "Device models excluded by this selector, even if they match all other conditions.",
          "items": {
            "$ref": "DeviceId"
          },
          "type": "array"
        },
        "systemOnChips": {
          "description": "Optional. The SoCs included by this selector. Only works for Android S+ devices.",
          "type": "array",
          "items": {
            "$ref": "SystemOnChip"
          }
        },
        "requiredSystemFeatures": {
          "items": {
            "$ref": "SystemFeature"
          },
          "type": "array",
          "description": "A device needs to have all these system features to be included by the selector."
        },
        "deviceRam": {
          "$ref": "DeviceRam",
          "description": "Conditions on the device's RAM."
        },
        "forbiddenSystemFeatures": {
          "type": "array",
          "description": "A device that has any of these system features is excluded by this selector, even if it matches all other conditions.",
          "items": {
            "$ref": "SystemFeature"
          }
        }
      }
    },
    "TestPurchaseContext": {
      "properties": {
        "fopType": {
          "description": "The fop type of the test purchase.",
          "enum": [
            "FOP_TYPE_UNSPECIFIED",
            "TEST"
          ],
          "enumDescriptions": [
            "Fop type unspecified. This value should never be set.",
            "The purchase was made using a test card."
          ],
          "type": "string"
        }
      },
      "id": "TestPurchaseContext",
      "type": "object",
      "description": "Context about a test purchase."
    },
    "UpdateSubscriptionRequest": {
      "type": "object",
      "properties": {
        "regionsVersion": {
          "description": "Required. The version of the available regions being used for the subscription.",
          "$ref": "RegionsVersion"
        },
        "allowMissing": {
          "description": "Optional. If set to true, and the subscription with the given package_name and product_id doesn't exist, the subscription will be created. If a new subscription is created, update_mask is ignored.",
          "type": "boolean"
        },
        "latencyTolerance": {
          "enumDescriptions": [
            "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
            "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
            "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
          ],
          "description": "Optional. The latency tolerance for the propagation of this product update. Defaults to latency-sensitive.",
          "enum": [
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
          ],
          "type": "string"
        },
        "updateMask": {
          "format": "google-fieldmask",
          "type": "string",
          "description": "Required. The list of fields to be updated."
        },
        "subscription": {
          "description": "Required. The subscription to update.",
          "$ref": "Subscription"
        }
      },
      "id": "UpdateSubscriptionRequest",
      "description": "Request message for UpdateSubscription."
    },
    "StandaloneApkMetadata": {
      "properties": {
        "fusedModuleName": {
          "description": "Names of the modules fused in this standalone APK.",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "id": "StandaloneApkMetadata",
      "type": "object",
      "description": "Holds data specific to Standalone APKs."
    },
    "ReviewsReplyResponse": {
      "type": "object",
      "properties": {
        "result": {
          "description": "The result of replying/updating a reply to review.",
          "$ref": "ReviewReplyResult"
        }
      },
      "id": "ReviewsReplyResponse",
      "description": "Response on status of replying to a review."
    },
    "ProductPurchaseV2": {
      "description": "A ProductPurchaseV2 resource indicates the status of a user's inapp product purchase.",
      "type": "object",
      "id": "ProductPurchaseV2",
      "properties": {
        "productLineItem": {
          "description": "Contains item-level info for a ProductPurchaseV2.",
          "items": {
            "$ref": "ProductLineItem"
          },
          "type": "array"
        },
        "testPurchaseContext": {
          "$ref": "TestPurchaseContext",
          "description": "Information related to test purchases. This will only be set for test purchases."
        },
        "acknowledgementState": {
          "enumDescriptions": [
            "Unspecified acknowledgement state.",
            "The purchase is not acknowledged yet.",
            "The purchase is acknowledged."
          ],
          "type": "string",
          "description": "Output only. The acknowledgement state of the purchase.",
          "readOnly": true,
          "enum": [
            "ACKNOWLEDGEMENT_STATE_UNSPECIFIED",
            "ACKNOWLEDGEMENT_STATE_PENDING",
            "ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED"
          ]
        },
        "obfuscatedExternalProfileId": {
          "type": "string",
          "description": "An obfuscated version of the id that is uniquely associated with the user'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."
        },
        "purchaseStateContext": {
          "$ref": "PurchaseStateContext",
          "description": "Information about the purchase state of the purchase."
        },
        "kind": {
          "type": "string",
          "description": "This kind represents a ProductPurchaseV2 object in the androidpublisher service."
        },
        "regionCode": {
          "type": "string",
          "description": "ISO 3166-1 alpha-2 billing region code of the user at the time the product was granted."
        },
        "orderId": {
          "description": "The order id associated with the purchase of the inapp product. May not be set if there is no order associated with the purchase.",
          "type": "string"
        },
        "purchaseCompletionTime": {
          "type": "string",
          "format": "google-datetime",
          "description": "The time when the purchase was successful, i.e., when the PurchaseState has changed to PURCHASED. This field will not be present until the payment is complete. For example, if the user initiated a pending transaction (https://developer.android.com/google/play/billing/integrate#pending), this field will not be populated until the user successfully completes the steps required to complete the transaction."
        },
        "obfuscatedExternalAccountId": {
          "type": "string",
          "description": "An obfuscated version of the id that is uniquely associated with the user's account in your app. Only present if specified using https://developer.android.com/reference/com/android/billingclient/api/BillingFlowParams.Builder#setobfuscatedaccountid when the purchase was made."
        }
      }
    },
    "OneTimeProductOfferRegionalPricingAndAvailabilityConfig": {
      "id": "OneTimeProductOfferRegionalPricingAndAvailabilityConfig",
      "description": "Regional pricing and availability configuration for a one-time product offer.",
      "properties": {
        "availability": {
          "enum": [
            "AVAILABILITY_UNSPECIFIED",
            "AVAILABLE",
            "NO_LONGER_AVAILABLE"
          ],
          "description": "Required. The availability for this region.",
          "enumDescriptions": [
            "Unspecified availability. Must not be used.",
            "The offer is available to users.",
            "The offer is no longer available to users. This value can only be used if the availability was previously set as AVAILABLE."
          ],
          "type": "string"
        },
        "regionCode": {
          "description": "Required. Region code this configuration applies to, as defined by ISO 3166-1 alpha-2, e.g., \"US\".",
          "type": "string"
        },
        "noOverride": {
          "$ref": "OneTimeProductOfferNoPriceOverrideOptions",
          "description": "The price defined in the purchase option for this region will be used."
        },
        "relativeDiscount": {
          "type": "number",
          "description": "The percentage discount subtracted from the purchase option price, specified as a fraction strictly larger than `0` and strictly smaller than `1`. For example, a value of `0.8` represents an 80% discount, meaning that if the purchase option price is $100, the offer price will be $20. The resulting price will be rounded to the nearest billable unit (e.g. cents for USD). The relative discount is considered invalid if the discounted price ends up being smaller than the minimum price allowed in this region.",
          "format": "double"
        },
        "absoluteDiscount": {
          "description": "The absolute value of the discount that is subtracted from the purchase option price. It should be between 0 and the purchase option price.",
          "$ref": "Money"
        }
      },
      "type": "object"
    },
    "DeactivateSubscriptionOfferRequest": {
      "properties": {
        "latencyTolerance": {
          "enumDescriptions": [
            "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
            "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
            "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
          ],
          "description": "Optional. The latency tolerance for the propagation of this product update. Defaults to latency-sensitive.",
          "enum": [
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
          ],
          "type": "string"
        },
        "basePlanId": {
          "description": "Required. The parent base plan (ID) of the offer to deactivate.",
          "type": "string"
        },
        "productId": {
          "type": "string",
          "description": "Required. The parent subscription (ID) of the offer to deactivate."
        },
        "packageName": {
          "type": "string",
          "description": "Required. The parent app (package name) of the offer to deactivate."
        },
        "offerId": {
          "description": "Required. The unique offer ID of the offer to deactivate.",
          "type": "string"
        }
      },
      "type": "object",
      "id": "DeactivateSubscriptionOfferRequest",
      "description": "Request message for DeactivateSubscriptionOffer."
    },
    "ReviewsReplyRequest": {
      "properties": {
        "replyText": {
          "type": "string",
          "description": "The text to set as the reply. Replies of more than approximately 350 characters will be rejected. HTML tags will be stripped."
        }
      },
      "type": "object",
      "description": "Request to reply to review or update existing reply.",
      "id": "ReviewsReplyRequest"
    },
    "UploadAppStoreAppPolicyDeclarationFileRequest": {
      "type": "object",
      "properties": {
        "fileType": {
          "description": "Required. Type of the policy declaration file.",
          "enumDescriptions": [
            "Unspecified file type.",
            "File type for PDF, JPEG, and PNG documents."
          ],
          "type": "string",
          "enum": [
            "DECLARATION_FILE_TYPE_UNSPECIFIED",
            "DECLARATION_FILE_TYPE_DOCUMENT"
          ]
        }
      },
      "id": "UploadAppStoreAppPolicyDeclarationFileRequest",
      "description": "Request to upload a policy declaration file."
    },
    "VariantTargeting": {
      "id": "VariantTargeting",
      "properties": {
        "multiAbiTargeting": {
          "description": "Multi-api-level targeting",
          "$ref": "MultiAbiTargeting"
        },
        "abiTargeting": {
          "$ref": "AbiTargeting",
          "description": "The abi that the variant targets"
        },
        "screenDensityTargeting": {
          "$ref": "ScreenDensityTargeting",
          "description": "The screen densities that this variant supports"
        },
        "textureCompressionFormatTargeting": {
          "$ref": "TextureCompressionFormatTargeting",
          "description": "Texture-compression-format-level targeting"
        },
        "sdkVersionTargeting": {
          "$ref": "SdkVersionTargeting",
          "description": "The sdk version that the variant targets"
        }
      },
      "type": "object",
      "description": "Targeting on the level of variants."
    },
    "DeviceMetadata": {
      "properties": {
        "glEsVersion": {
          "description": "OpenGL version",
          "format": "int32",
          "type": "integer"
        },
        "ramMb": {
          "format": "int32",
          "description": "Device RAM in Megabytes, e.g. \"2048\"",
          "type": "integer"
        },
        "cpuModel": {
          "type": "string",
          "description": "Device CPU model, e.g. \"MSM8974\""
        },
        "deviceClass": {
          "description": "Device class (e.g. tablet)",
          "type": "string"
        },
        "nativePlatform": {
          "type": "string",
          "description": "Comma separated list of native platforms (e.g. \"arm\", \"arm7\")"
        },
        "cpuMake": {
          "description": "Device CPU make, e.g. \"Qualcomm\"",
          "type": "string"
        },
        "screenHeightPx": {
          "format": "int32",
          "description": "Screen height in pixels",
          "type": "integer"
        },
        "productName": {
          "description": "Device model name (e.g. Droid)",
          "type": "string"
        },
        "manufacturer": {
          "type": "string",
          "description": "Device manufacturer (e.g. Motorola)"
        },
        "screenWidthPx": {
          "description": "Screen width in pixels",
          "type": "integer",
          "format": "int32"
        },
        "screenDensityDpi": {
          "description": "Screen density in DPI",
          "type": "integer",
          "format": "int32"
        }
      },
      "type": "object",
      "description": "Characteristics of the user's device.",
      "id": "DeviceMetadata"
    },
    "AssetSliceSet": {
      "type": "object",
      "properties": {
        "assetModuleMetadata": {
          "$ref": "AssetModuleMetadata",
          "description": "Module level metadata."
        },
        "apkDescription": {
          "type": "array",
          "items": {
            "$ref": "ApkDescription"
          },
          "description": "Asset slices."
        }
      },
      "description": "Set of asset slices belonging to a single asset module.",
      "id": "AssetSliceSet"
    },
    "OneTimeProductTaxAndComplianceSettings": {
      "type": "object",
      "properties": {
        "regionalTaxConfigs": {
          "type": "array",
          "description": "Regional tax configuration.",
          "items": {
            "$ref": "RegionalTaxConfig"
          }
        },
        "regionalProductAgeRatingInfos": {
          "items": {
            "$ref": "RegionalProductAgeRatingInfo"
          },
          "description": "Regional age rating information. Currently this field is only supported for region code `US`.",
          "type": "array"
        },
        "productTaxCategoryCode": {
          "type": "string",
          "description": "Product tax category code to assign to the one-time product. Product tax category determines the transaction tax rates applied to the product. Refer to the [Help Center article](https://support.google.com/googleplay/android-developer/answer/16408159) for more information."
        },
        "isTokenizedDigitalAsset": {
          "description": "Whether this one-time product is declared as a product representing a tokenized digital asset.",
          "type": "boolean"
        }
      },
      "description": "Details about taxation, Google Play policy and legal compliance for one-time products.",
      "id": "OneTimeProductTaxAndComplianceSettings"
    },
    "TargetingRuleScope": {
      "type": "object",
      "id": "TargetingRuleScope",
      "properties": {
        "thisSubscription": {
          "$ref": "TargetingRuleScopeThisSubscription",
          "description": "The scope of the current targeting rule is the subscription in which this offer is defined."
        },
        "specificSubscriptionInApp": {
          "type": "string",
          "description": "The scope of the current targeting rule is the subscription with the specified subscription ID. Must be a subscription within the same parent app."
        },
        "anySubscriptionInApp": {
          "description": "The scope of the current targeting rule is any subscription in the parent app.",
          "$ref": "TargetingRuleScopeAnySubscriptionInApp"
        }
      },
      "description": "Defines the scope of subscriptions which a targeting rule can match to target offers to users based on past or current entitlement."
    },
    "GeneratedApksListResponse": {
      "properties": {
        "generatedApks": {
          "description": "All generated APKs, grouped by the APK signing key.",
          "items": {
            "$ref": "GeneratedApksPerSigningKey"
          },
          "type": "array"
        }
      },
      "id": "GeneratedApksListResponse",
      "type": "object",
      "description": "Response to list generated APKs."
    },
    "PurchaseStateContext": {
      "id": "PurchaseStateContext",
      "description": "Context about the purchase state.",
      "type": "object",
      "properties": {
        "purchaseState": {
          "readOnly": true,
          "enum": [
            "PURCHASE_STATE_UNSPECIFIED",
            "PURCHASED",
            "CANCELLED",
            "PENDING"
          ],
          "enumDescriptions": [
            "Purchase state unspecified. This value should never be set.",
            "Purchased successfully.",
            "Purchase canceled.",
            "The purchase is in a pending state and has not yet been completed. For more information on handling pending purchases, see https://developer.android.com/google/play/billing/integrate#pending."
          ],
          "description": "Output only. The purchase state of the purchase.",
          "type": "string"
        }
      }
    },
    "ProductOfferDetails": {
      "type": "object",
      "properties": {
        "offerToken": {
          "description": "The per-transaction offer token used to make this purchase line item.",
          "type": "string"
        },
        "consumptionState": {
          "enum": [
            "CONSUMPTION_STATE_UNSPECIFIED",
            "CONSUMPTION_STATE_YET_TO_BE_CONSUMED",
            "CONSUMPTION_STATE_CONSUMED"
          ],
          "description": "Output only. The consumption state of the purchase.",
          "enumDescriptions": [
            "Consumption state unspecified. This value should never be set.",
            "Yet to be consumed.",
            "Consumed already."
          ],
          "readOnly": true,
          "type": "string"
        },
        "offerId": {
          "type": "string",
          "description": "The offer ID. Only present for offers."
        },
        "offerTags": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The latest offer tags associated with the offer. It includes tags inherited from the purchase option."
        },
        "purchaseOptionId": {
          "type": "string",
          "description": "The purchase option ID."
        },
        "refundableQuantity": {
          "format": "int32",
          "type": "integer",
          "description": "The quantity eligible for refund, i.e. quantity that hasn't been refunded. The value reflects quantity-based partial refunds and full refunds."
        },
        "rentOfferDetails": {
          "description": "Offer details about rent offers. This will only be set for rental line items.",
          "$ref": "RentOfferDetails"
        },
        "quantity": {
          "format": "int32",
          "description": "The quantity associated with the purchase of the inapp product.",
          "type": "integer"
        },
        "preorderOfferDetails": {
          "description": "Offer details for a preorder offer. This will only be set for preorders.",
          "$ref": "PreorderOfferDetails"
        }
      },
      "id": "ProductOfferDetails",
      "description": "Offer details information related to a purchase line item."
    },
    "Variant": {
      "description": "APK that is suitable for inclusion in a system image. The resource of SystemApksService.",
      "type": "object",
      "properties": {
        "variantId": {
          "readOnly": true,
          "description": "Output only. The ID of a previously created system APK variant.",
          "format": "uint32",
          "type": "integer"
        },
        "deviceSpec": {
          "$ref": "DeviceSpec",
          "description": "The device spec used to generate the APK."
        },
        "options": {
          "description": "Optional. Options applied to the generated APK.",
          "$ref": "SystemApkOptions"
        }
      },
      "id": "Variant"
    },
    "OneTimeProductBuyPurchaseOption": {
      "id": "OneTimeProductBuyPurchaseOption",
      "type": "object",
      "properties": {
        "multiQuantityEnabled": {
          "description": "Optional. Whether this purchase option allows multi-quantity. Multi-quantity allows buyer to purchase more than one item in a single checkout.",
          "type": "boolean"
        },
        "legacyCompatible": {
          "description": "Optional. Whether this purchase option will be available in legacy PBL flows that do not support one-time products model. Up to one \"buy\" purchase option can be marked as backwards compatible.",
          "type": "boolean"
        }
      },
      "description": "A purchase option that can be bought."
    },
    "ImagesUploadResponse": {
      "properties": {
        "image": {
          "$ref": "Image",
          "description": "The uploaded image."
        }
      },
      "type": "object",
      "description": "Response for uploading an image.",
      "id": "ImagesUploadResponse"
    },
    "BundlesListResponse": {
      "type": "object",
      "properties": {
        "kind": {
          "description": "The kind of this response (\"androidpublisher#bundlesListResponse\").",
          "type": "string"
        },
        "bundles": {
          "description": "All app bundles.",
          "items": {
            "$ref": "Bundle"
          },
          "type": "array"
        }
      },
      "description": "Response listing all app bundles.",
      "id": "BundlesListResponse"
    },
    "RemoteInAppUpdateData": {
      "properties": {
        "remoteAppUpdateDataPerBundle": {
          "type": "array",
          "description": "Data related to the recovery action at bundle level.",
          "items": {
            "$ref": "RemoteInAppUpdateDataPerBundle"
          }
        }
      },
      "id": "RemoteInAppUpdateData",
      "type": "object",
      "description": "Data related to Remote In-App Update action such as recovered user count, affected user count etc."
    },
    "ApksListResponse": {
      "description": "Response listing all APKs.",
      "properties": {
        "kind": {
          "description": "The kind of this response (\"androidpublisher#apksListResponse\").",
          "type": "string"
        },
        "apks": {
          "type": "array",
          "items": {
            "$ref": "Apk"
          },
          "description": "All APKs."
        }
      },
      "id": "ApksListResponse",
      "type": "object"
    },
    "ListSubscriptionsResponse": {
      "description": "Response message for ListSubscriptions.",
      "properties": {
        "nextPageToken": {
          "type": "string",
          "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages."
        },
        "subscriptions": {
          "type": "array",
          "description": "The subscriptions from the specified app.",
          "items": {
            "$ref": "Subscription"
          }
        }
      },
      "type": "object",
      "id": "ListSubscriptionsResponse"
    },
    "ScreenDensity": {
      "description": "Represents a screen density.",
      "id": "ScreenDensity",
      "properties": {
        "densityAlias": {
          "enum": [
            "DENSITY_UNSPECIFIED",
            "NODPI",
            "LDPI",
            "MDPI",
            "TVDPI",
            "HDPI",
            "XHDPI",
            "XXHDPI",
            "XXXHDPI"
          ],
          "description": "Alias for a screen density.",
          "type": "string",
          "enumDescriptions": [
            "Unspecified screen density.",
            "NODPI screen density.",
            "LDPI screen density.",
            "MDPI screen density.",
            "TVDPI screen density.",
            "HDPI screen density.",
            "XHDPI screen density.",
            "XXHDPI screen density.",
            "XXXHDPI screen density."
          ]
        },
        "densityDpi": {
          "format": "int32",
          "description": "Value for density dpi.",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "UpdateOneTimeProductRequest": {
      "description": "Request message for UpdateOneTimeProduct.",
      "type": "object",
      "properties": {
        "allowMissing": {
          "type": "boolean",
          "description": "Optional. If set to true, and the one-time product with the given package_name and product_id doesn't exist, the one-time product will be created. If a new one-time product is created, update_mask is ignored."
        },
        "regionsVersion": {
          "description": "Required. The version of the available regions being used for the one-time product.",
          "$ref": "RegionsVersion"
        },
        "updateMask": {
          "type": "string",
          "description": "Required. The list of fields to be updated.",
          "format": "google-fieldmask"
        },
        "latencyTolerance": {
          "enum": [
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
          ],
          "description": "Optional. The latency tolerance for the propagation of this product upsert. Defaults to latency-sensitive.",
          "type": "string",
          "enumDescriptions": [
            "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
            "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
            "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
          ]
        },
        "oneTimeProduct": {
          "description": "Required. The one-time product to upsert.",
          "$ref": "OneTimeProduct"
        }
      },
      "id": "UpdateOneTimeProductRequest"
    },
    "ApksAddExternallyHostedResponse": {
      "type": "object",
      "description": "Response for creating a new externally hosted APK.",
      "properties": {
        "externallyHostedApk": {
          "$ref": "ExternallyHostedApk",
          "description": "The definition of the externally-hosted APK and where it is located."
        }
      },
      "id": "ApksAddExternallyHostedResponse"
    },
    "PlanTransitionDetails": {
      "properties": {
        "productId": {
          "description": "[Required] The product ID to which this plan would be transitioned, (for example, 'monthly001').",
          "type": "string"
        },
        "basePlanId": {
          "type": "string",
          "description": "[Required] The base plan ID to which this plan would be transitioned."
        },
        "transitionInfo": {
          "description": "Additional info about the scheduled plan transition. Will be present only if a plan transition has been scheduled.",
          "$ref": "TransitionInfo"
        }
      },
      "id": "PlanTransitionDetails",
      "description": "Information related to a plan transition.",
      "type": "object"
    },
    "UserInitiatedCancellation": {
      "type": "object",
      "description": "Information specific to cancellations initiated by users.",
      "id": "UserInitiatedCancellation",
      "properties": {
        "cancelSurveyResult": {
          "description": "Information provided by the user when they complete the subscription cancellation flow (cancellation reason survey).",
          "$ref": "CancelSurveyResult"
        },
        "cancelTime": {
          "description": "The time at which the subscription was canceled by the user. The user might still have access to the subscription after this time. Use line_items.expiry_time to determine if a user still has access.",
          "type": "string",
          "format": "google-datetime"
        }
      }
    },
    "AppStoreAppPolicyDeclaration": {
      "type": "object",
      "description": "A policy declaration with its responses.",
      "properties": {
        "responses": {
          "type": "array",
          "items": {
            "$ref": "PolicyResponse"
          },
          "description": "Required. Responses provided for this declaration."
        },
        "declarationId": {
          "type": "string",
          "description": "Required. ID of the policy declaration."
        }
      },
      "id": "AppStoreAppPolicyDeclaration"
    },
    "OneTimeProductPreOrderOffer": {
      "properties": {
        "startTime": {
          "description": "Required. Time when the pre-order will start being available.",
          "format": "google-datetime",
          "type": "string"
        },
        "priceChangeBehavior": {
          "enum": [
            "PRE_ORDER_PRICE_CHANGE_BEHAVIOR_UNSPECIFIED",
            "PRE_ORDER_PRICE_CHANGE_BEHAVIOR_TWO_POINT_LOWEST",
            "PRE_ORDER_PRICE_CHANGE_BEHAVIOR_NEW_ORDERS_ONLY"
          ],
          "enumDescriptions": [
            "Unspecified price change behavior. Must not be used.",
            "The buyer gets charged the minimum between the initial price at the time of pre-order and the final offer price on the release date.",
            "The buyer gets the same price as the one they pre-ordered, regardless of any price changes that may have happened after the pre-order."
          ],
          "description": "Required. Immutable. Specifies how price changes affect pre-existing pre-orders.",
          "type": "string"
        },
        "endTime": {
          "description": "Required. Time when the pre-order will stop being available.",
          "type": "string",
          "format": "google-datetime"
        },
        "releaseTime": {
          "type": "string",
          "description": "Required. Time on which the product associated with the pre-order will be released and the pre-order orders fulfilled.",
          "format": "google-datetime"
        }
      },
      "id": "OneTimeProductPreOrderOffer",
      "type": "object",
      "description": "Configuration specific to pre-order offers."
    },
    "UpdateAppStoreHostedAppPublishStatusRequest": {
      "properties": {
        "publishState": {
          "type": "string",
          "enum": [
            "APP_STORE_APP_PUBLISH_STATE_UNSPECIFIED",
            "APP_STORE_APP_PUBLISH_STATE_PUBLISHED",
            "APP_STORE_APP_PUBLISH_STATE_UNPUBLISHED"
          ],
          "enumDescriptions": [
            "Unspecified publish state. Do not use.",
            "The app is published and available on the third-party app store.",
            "The app is unpublished and no longer available on the third-party app store."
          ],
          "description": "Required. The new publish state for the hosted app."
        }
      },
      "id": "UpdateAppStoreHostedAppPublishStatusRequest",
      "description": "Request to update the publish status of an app store hosted app. The default state for any app with an update is PUBLISHED. It is not necessary to call this RPC explicitly to set an app to PUBLISHED.",
      "type": "object"
    },
    "BatchMigrateBasePlanPricesRequest": {
      "type": "object",
      "description": "Request message for BatchMigrateBasePlanPrices.",
      "properties": {
        "requests": {
          "type": "array",
          "items": {
            "$ref": "MigrateBasePlanPricesRequest"
          },
          "description": "Required. Up to 100 price migration requests. All requests must update different base plans."
        }
      },
      "id": "BatchMigrateBasePlanPricesRequest"
    },
    "Apk": {
      "id": "Apk",
      "properties": {
        "versionCode": {
          "description": "The version code of the APK, as specified in the manifest file.",
          "type": "integer",
          "format": "int32"
        },
        "binary": {
          "$ref": "ApkBinary",
          "description": "Information about the binary payload of this APK."
        }
      },
      "type": "object",
      "description": "Information about an APK. The resource for ApksService."
    },
    "User": {
      "properties": {
        "email": {
          "description": "Immutable. The user's email address.",
          "type": "string"
        },
        "name": {
          "type": "string",
          "description": "Required. Resource name for this user, following the pattern \"developers/{developer}/users/{email}\"."
        },
        "partial": {
          "type": "boolean",
          "description": "Output only. Whether there are more permissions for the user that are not represented here. This can happen if the caller does not have permission to manage all apps in the account. This is also `true` if this user is the account owner. If this field is `true`, it should be taken as a signal that this user cannot be fully managed via the API. That is, the API caller is not be able to manage all of the permissions this user holds, either because it doesn't know about them or because the user is the account owner.",
          "readOnly": true
        },
        "grants": {
          "readOnly": true,
          "items": {
            "$ref": "Grant"
          },
          "description": "Output only. Per-app permissions for the user.",
          "type": "array"
        },
        "expirationTime": {
          "type": "string",
          "format": "google-datetime",
          "description": "The time at which the user's access expires, if set. When setting this value, it must always be in the future."
        },
        "developerAccountPermissions": {
          "items": {
            "enumDescriptions": [
              "Unknown or unspecified permission.",
              "View app information and download bulk reports (read-only). Deprecated: Check CAN_VIEW_NON_FINANCIAL_DATA_GLOBAL.",
              "View financial data, orders, and cancellation survey responses.",
              "Admin (all permissions).",
              "Edit Play Games Services projects.",
              "Publish Play Games Services projects.",
              "Reply to reviews.",
              "Release to production, exclude devices, and use app signing by Google Play.",
              "Release to testing tracks.",
              "Manage testing tracks and edit tester lists.",
              "Manage store presence.",
              "Create, edit, and delete draft apps.",
              "Create and publish private apps to your organization.",
              "Deprecated: This permission is no longer supported. Choose whether apps are public, or only available to your organization.",
              "Manage orders and subscriptions.",
              "Manage policy related pages on all apps for the developer.",
              "View app information and download bulk reports (read-only).",
              "View app quality information for all apps for the developer.",
              "Manage the deep links setup for all apps for the developer.",
              "Allows viewing connected apps in the Google Play Console.",
              "Allows editing connected apps in the Google Play Console."
            ],
            "enumDeprecated": [
              false,
              true,
              false,
              false,
              false,
              false,
              false,
              false,
              false,
              false,
              false,
              false,
              false,
              true,
              false,
              false,
              false,
              false,
              false,
              false,
              false
            ],
            "enum": [
              "DEVELOPER_LEVEL_PERMISSION_UNSPECIFIED",
              "CAN_SEE_ALL_APPS",
              "CAN_VIEW_FINANCIAL_DATA_GLOBAL",
              "CAN_MANAGE_PERMISSIONS_GLOBAL",
              "CAN_EDIT_GAMES_GLOBAL",
              "CAN_PUBLISH_GAMES_GLOBAL",
              "CAN_REPLY_TO_REVIEWS_GLOBAL",
              "CAN_MANAGE_PUBLIC_APKS_GLOBAL",
              "CAN_MANAGE_TRACK_APKS_GLOBAL",
              "CAN_MANAGE_TRACK_USERS_GLOBAL",
              "CAN_MANAGE_PUBLIC_LISTING_GLOBAL",
              "CAN_MANAGE_DRAFT_APPS_GLOBAL",
              "CAN_CREATE_MANAGED_PLAY_APPS_GLOBAL",
              "CAN_CHANGE_MANAGED_PLAY_SETTING_GLOBAL",
              "CAN_MANAGE_ORDERS_GLOBAL",
              "CAN_MANAGE_APP_CONTENT_GLOBAL",
              "CAN_VIEW_NON_FINANCIAL_DATA_GLOBAL",
              "CAN_VIEW_APP_QUALITY_GLOBAL",
              "CAN_MANAGE_DEEPLINKS_GLOBAL",
              "CAN_VIEW_CONNECTED_APPS_GLOBAL",
              "CAN_EDIT_CONNECTED_APPS_GLOBAL"
            ],
            "type": "string"
          },
          "type": "array",
          "description": "Permissions for the user which apply across the developer account."
        },
        "accessState": {
          "enum": [
            "ACCESS_STATE_UNSPECIFIED",
            "INVITED",
            "INVITATION_EXPIRED",
            "ACCESS_GRANTED",
            "ACCESS_EXPIRED"
          ],
          "enumDescriptions": [
            "Unknown or unspecified access state.",
            "User is invited but has not yet accepted the invitation.",
            "Invitation has expired.",
            "User has accepted an invitation and has access to the Play Console.",
            "Account access has expired."
          ],
          "readOnly": true,
          "description": "Output only. The state of the user's access to the Play Console.",
          "type": "string"
        }
      },
      "type": "object",
      "description": "A user resource.",
      "id": "User"
    },
    "ListSubscriptionOffersResponse": {
      "description": "Response message for ListSubscriptionOffers.",
      "id": "ListSubscriptionOffersResponse",
      "type": "object",
      "properties": {
        "nextPageToken": {
          "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.",
          "type": "string"
        },
        "subscriptionOffers": {
          "description": "The subscription offers from the specified subscription.",
          "items": {
            "$ref": "SubscriptionOffer"
          },
          "type": "array"
        }
      }
    },
    "DeveloperInitiatedCancellation": {
      "properties": {},
      "id": "DeveloperInitiatedCancellation",
      "type": "object",
      "description": "Information specific to cancellations initiated by developers."
    },
    "ConvertRegionPricesResponse": {
      "description": "Response message for ConvertRegionPrices.",
      "type": "object",
      "id": "ConvertRegionPricesResponse",
      "properties": {
        "convertedOtherRegionsPrice": {
          "description": "Converted other regions prices in USD and EUR, to use for countries where Play doesn't support a country's local currency.",
          "$ref": "ConvertedOtherRegionsPrice"
        },
        "convertedRegionPrices": {
          "additionalProperties": {
            "$ref": "ConvertedRegionPrice"
          },
          "description": "Map from region code to converted region price.",
          "type": "object"
        },
        "regionVersion": {
          "$ref": "RegionsVersion",
          "description": "The region version at which the prices were generated."
        }
      }
    },
    "OneTimeProduct": {
      "id": "OneTimeProduct",
      "properties": {
        "purchaseOptions": {
          "description": "Required. The set of purchase options for this one-time product.",
          "items": {
            "$ref": "OneTimeProductPurchaseOption"
          },
          "type": "array"
        },
        "packageName": {
          "type": "string",
          "description": "Required. Immutable. Package name of the parent app."
        },
        "productId": {
          "description": "Required. Immutable. Unique product ID of the product. Unique within the parent app. Product IDs must start with a number or lowercase letter, and can contain numbers (0-9), lowercase letters (a-z), underscores (_), and periods (.).",
          "type": "string"
        },
        "offerTags": {
          "items": {
            "$ref": "OfferTag"
          },
          "description": "Optional. List of up to 20 custom tags specified for this one-time product, and returned to the app through the billing library. Purchase options and offers for this product will also receive these tags in the billing library.",
          "type": "array"
        },
        "listings": {
          "type": "array",
          "description": "Required. Set of localized title and description data. Must not have duplicate entries with the same language_code.",
          "items": {
            "$ref": "OneTimeProductListing"
          }
        },
        "taxAndComplianceSettings": {
          "description": "Details about taxes and legal compliance.",
          "$ref": "OneTimeProductTaxAndComplianceSettings"
        },
        "restrictedPaymentCountries": {
          "description": "Optional. Countries where the purchase of this one-time product is restricted to payment methods registered in the same country. If empty, no payment location restrictions are imposed.",
          "$ref": "RestrictedPaymentCountries"
        },
        "regionsVersion": {
          "description": "Output only. The version of the regions configuration that was used to generate the one-time product.",
          "readOnly": true,
          "$ref": "RegionsVersion"
        }
      },
      "description": "A single one-time product for an app.",
      "type": "object"
    },
    "OneTimeProductGameRewardOffer": {
      "type": "object",
      "description": "Configuration specific to game reward offers.",
      "properties": {
        "redemptionLimit": {
          "description": "Optional. The number of times this offer can be redeemed. If unset or set to 0, allows for unlimited offer redemptions. Otherwise must be a number between 1 and 50 inclusive.",
          "format": "int64",
          "type": "string"
        }
      },
      "id": "OneTimeProductGameRewardOffer"
    },
    "BasePriceOfferPhase": {
      "description": "Details about base price offer phase.",
      "type": "object",
      "properties": {},
      "id": "BasePriceOfferPhase"
    },
    "SchedulePlanTransitionRequest": {
      "id": "SchedulePlanTransitionRequest",
      "type": "object",
      "description": "Request for the purchases.subscriptionsv2.schedulePlanTransition API.",
      "properties": {
        "etag": {
          "description": "If set, the API will fail if the etag does not match the latest etag for this subscription. The etag is retrieved from purchases.subscriptionsv2.get: https://developers.google.com/android-publisher/api-ref/rest/v3/purchases.subscriptionsv2/get",
          "type": "string"
        },
        "definiteTransition": {
          "description": "When using this mode, the user's transition to the new plan is definite, and cannot be canceled.",
          "$ref": "DefiniteTransition"
        },
        "tentativeTransition": {
          "$ref": "TentativeTransition",
          "description": "When using this mode, the user's transition to the new plan is tentative, and can be canceled."
        },
        "earliestTransitionEffectiveTime": {
          "description": "Required. The earliest time at which the plan transition may take effect. The actual transition will take place at the time of renewal on or after this time.",
          "format": "google-datetime",
          "type": "string"
        },
        "productId": {
          "description": "Required. The subscription product (for example, 'premium_plan') for which the transition must be scheduled.",
          "type": "string"
        }
      }
    },
    "ProrationPeriodDetails": {
      "description": "Details of a proration period. A proration period can be a period calculated during a plan change to cover existing entitlements (For more information, see [Allow users to upgrade, downgrade, or change their subscription](https://developer.android.com/google/play/billing/subscriptions#allow-users-change), or a prorated period to align add-on renewal dates with the base (For more information, see [Rules applicable for items in the purchase](https://developer.android.com/google/play/billing/subscription-with-addons#rules-base-addons)).",
      "id": "ProrationPeriodDetails",
      "type": "object",
      "properties": {
        "originalOfferPhase": {
          "enum": [
            "OFFER_PHASE_UNSPECIFIED",
            "BASE",
            "INTRODUCTORY",
            "FREE_TRIAL"
          ],
          "enumDescriptions": [
            "Offer phase unspecified. This value is not used.",
            "The order funds a base price period.",
            "The order funds an introductory pricing period.",
            "The order funds a free trial period."
          ],
          "type": "string",
          "description": "Represent the original offer phase from the purchased the line item if the proration period contains any of them. For example, a proration period from CHARGE_FULL_PRICE plan change may merge the 1st offer phase of the subscription offer of the new product user purchased. In this case, the original offer phase will be set here."
        }
      }
    },
    "AddTargetingResponse": {
      "properties": {},
      "type": "object",
      "id": "AddTargetingResponse",
      "description": "Response message for AddTargeting."
    },
    "ExternalAccountIdentifiers": {
      "description": "User account identifier in the third-party service.",
      "id": "ExternalAccountIdentifiers",
      "type": "object",
      "properties": {
        "externalAccountId": {
          "type": "string",
          "description": "User account identifier in the third-party service. Only present if account linking happened as part of the subscription purchase flow."
        },
        "obfuscatedExternalProfileId": {
          "description": "An obfuscated version of the id that is uniquely associated with the user'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.",
          "type": "string"
        },
        "obfuscatedExternalAccountId": {
          "type": "string",
          "description": "An obfuscated version of the id that is uniquely associated with the user'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."
        }
      }
    },
    "DeactivateOneTimeProductOfferRequest": {
      "properties": {
        "latencyTolerance": {
          "type": "string",
          "enumDescriptions": [
            "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
            "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
            "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
          ],
          "enum": [
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
          ],
          "description": "Optional. The latency tolerance for the propagation of this update. Defaults to latency-sensitive."
        },
        "productId": {
          "type": "string",
          "description": "Required. The parent one-time product (ID) of the offer to deactivate."
        },
        "packageName": {
          "description": "Required. The parent app (package name) of the offer to deactivate.",
          "type": "string"
        },
        "purchaseOptionId": {
          "description": "Required. The parent purchase option (ID) of the offer to deactivate.",
          "type": "string"
        },
        "offerId": {
          "type": "string",
          "description": "Required. The offer ID of the offer to deactivate."
        }
      },
      "description": "Request message for DeactivateOneTimeProductOffer.",
      "id": "DeactivateOneTimeProductOfferRequest",
      "type": "object"
    },
    "PreorderDetails": {
      "id": "PreorderDetails",
      "description": "Details of a pre-order purchase.",
      "type": "object",
      "properties": {}
    },
    "UploadImageResponse": {
      "type": "object",
      "id": "UploadImageResponse",
      "properties": {
        "imageId": {
          "description": "The unique ID of the uploaded image.",
          "type": "string"
        }
      },
      "description": "Response for uploading an image."
    },
    "TrackCountryAvailability": {
      "properties": {
        "countries": {
          "type": "array",
          "items": {
            "$ref": "TrackTargetedCountry"
          },
          "description": "A list of one or more countries where artifacts in this track are available. This list includes all countries that are targeted by the track, even if only specific carriers are targeted in that country."
        },
        "syncWithProduction": {
          "description": "Whether this track's availability is synced with the default production track. See https://support.google.com/googleplay/android-developer/answer/7550024 for more information on syncing country availability with production. Note that if this is true, the returned \"countries\" and \"rest_of_world\" fields will reflect the values for the default production track.",
          "type": "boolean"
        },
        "restOfWorld": {
          "type": "boolean",
          "description": "Whether artifacts in this track are available to \"rest of the world\" countries."
        }
      },
      "id": "TrackCountryAvailability",
      "description": "Resource for per-track country availability information.",
      "type": "object"
    },
    "OneTimeProductOfferNoPriceOverrideOptions": {
      "type": "object",
      "id": "OneTimeProductOfferNoPriceOverrideOptions",
      "description": "Options for one-time product offers without a regional price override.",
      "properties": {}
    },
    "ExpansionFilesUploadResponse": {
      "description": "Response for uploading an expansion file.",
      "id": "ExpansionFilesUploadResponse",
      "properties": {
        "expansionFile": {
          "description": "The uploaded expansion file configuration.",
          "$ref": "ExpansionFile"
        }
      },
      "type": "object"
    },
    "BatchDeleteOneTimeProductOffersRequest": {
      "id": "BatchDeleteOneTimeProductOffersRequest",
      "type": "object",
      "description": "Request message for BatchDeleteOneTimeProductOffers.",
      "properties": {
        "requests": {
          "items": {
            "$ref": "DeleteOneTimeProductOfferRequest"
          },
          "description": "Required. A list of delete requests of up to 100 elements. All requests must correspond to different offers.",
          "type": "array"
        }
      }
    },
    "BatchGetOneTimeProductOffersRequest": {
      "id": "BatchGetOneTimeProductOffersRequest",
      "description": "Request message for the BatchGetOneTimeProductOffers endpoint.",
      "type": "object",
      "properties": {
        "requests": {
          "type": "array",
          "description": "Required. A list of get requests of up to 100 elements. All requests must retrieve different offers.",
          "items": {
            "$ref": "GetOneTimeProductOfferRequest"
          }
        }
      }
    },
    "RegionalTaxRateInfo": {
      "description": "Specified details about taxation in a given geographical region.",
      "properties": {
        "taxTier": {
          "enumDescriptions": [
            "",
            "",
            "",
            "",
            "",
            ""
          ],
          "enum": [
            "TAX_TIER_UNSPECIFIED",
            "TAX_TIER_BOOKS_1",
            "TAX_TIER_NEWS_1",
            "TAX_TIER_NEWS_2",
            "TAX_TIER_MUSIC_OR_AUDIO_1",
            "TAX_TIER_LIVE_OR_BROADCAST_1"
          ],
          "type": "string",
          "description": "Tax tier to specify reduced tax rate. Developers who sell digital news, magazines, newspapers, books, or audiobooks in various regions may be eligible for reduced tax rates. [Learn more](https://support.google.com/googleplay/android-developer/answer/10463498)."
        },
        "eligibleForStreamingServiceTaxRate": {
          "type": "boolean",
          "description": "You must tell us if your app contains streaming products to correctly charge US state and local sales tax. Field only supported in the United States."
        },
        "streamingTaxType": {
          "enum": [
            "STREAMING_TAX_TYPE_UNSPECIFIED",
            "STREAMING_TAX_TYPE_TELCO_VIDEO_RENTAL",
            "STREAMING_TAX_TYPE_TELCO_VIDEO_SALES",
            "STREAMING_TAX_TYPE_TELCO_VIDEO_MULTI_CHANNEL",
            "STREAMING_TAX_TYPE_TELCO_AUDIO_RENTAL",
            "STREAMING_TAX_TYPE_TELCO_AUDIO_SALES",
            "STREAMING_TAX_TYPE_TELCO_AUDIO_MULTI_CHANNEL"
          ],
          "type": "string",
          "enumDescriptions": [
            "No telecommunications tax collected.",
            "US-specific telecommunications tax tier for video streaming, on demand, rentals / subscriptions / pay-per-view.",
            "US-specific telecommunications tax tier for video streaming of pre-recorded content like movies, tv shows.",
            "US-specific telecommunications tax tier for video streaming of multi-channel programming.",
            "US-specific telecommunications tax tier for audio streaming, rental / subscription.",
            "US-specific telecommunications tax tier for audio streaming, sale / permanent download.",
            "US-specific telecommunications tax tier for multi channel audio streaming like radio."
          ],
          "description": "To collect communications or amusement taxes in the United States, choose the appropriate tax category. [Learn more](https://support.google.com/googleplay/android-developer/answer/10463498#streaming_tax)."
        }
      },
      "type": "object",
      "id": "RegionalTaxRateInfo"
    },
    "ListRecentUpdateEventsResponse": {
      "id": "ListRecentUpdateEventsResponse",
      "type": "object",
      "properties": {
        "recentUpdateEvents": {
          "type": "array",
          "description": "The list of recent update events.",
          "items": {
            "$ref": "RecentUpdateEvent"
          }
        },
        "nextPageToken": {
          "description": "A token, which can be sent as `page_token` to retrieve the next page. If this field is omitted, there are no subsequent pages.",
          "type": "string"
        }
      },
      "description": "Response message for ListRecentUpdateEvents."
    },
    "SdkVersion": {
      "type": "object",
      "description": "Represents an sdk version.",
      "properties": {
        "min": {
          "description": "Inclusive minimum value of an sdk version.",
          "type": "integer",
          "format": "int32"
        }
      },
      "id": "SdkVersion"
    },
    "NestedPolicyResponse": {
      "description": "An individual nested response to a policy question about an app. Nested responses are like regular responses but without groups.",
      "type": "object",
      "properties": {
        "booleanResponse": {
          "$ref": "PolicyBooleanResponse",
          "description": "Optional. A boolean response."
        },
        "stringResponse": {
          "description": "Optional. A string response.",
          "$ref": "PolicyStringResponse"
        },
        "multipleChoiceResponse": {
          "description": "Optional. A multiple choice response.",
          "$ref": "PolicyMultipleChoiceResponse"
        },
        "singleChoiceResponse": {
          "description": "Optional. A single choice response.",
          "$ref": "PolicySingleChoiceResponse"
        },
        "documentResponse": {
          "description": "Optional. A document response.",
          "$ref": "PolicyDocumentResponse"
        },
        "questionId": {
          "type": "string",
          "description": "Required. ID of the question being answered."
        }
      },
      "id": "NestedPolicyResponse"
    },
    "ActivateOneTimeProductOfferRequest": {
      "description": "Request message for ActivateOneTimeProductOffer.",
      "type": "object",
      "id": "ActivateOneTimeProductOfferRequest",
      "properties": {
        "purchaseOptionId": {
          "description": "Required. The parent purchase option (ID) of the offer to activate.",
          "type": "string"
        },
        "packageName": {
          "type": "string",
          "description": "Required. The parent app (package name) of the offer to activate."
        },
        "productId": {
          "type": "string",
          "description": "Required. The parent one-time product (ID) of the offer to activate."
        },
        "latencyTolerance": {
          "enum": [
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
          ],
          "description": "Optional. The latency tolerance for the propagation of this update. Defaults to latency-sensitive.",
          "enumDescriptions": [
            "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
            "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
            "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
          ],
          "type": "string"
        },
        "offerId": {
          "type": "string",
          "description": "Required. The offer ID of the offer to activate."
        }
      }
    },
    "ConvertRegionPricesRequest": {
      "properties": {
        "price": {
          "$ref": "Money",
          "description": "The intital price to convert other regions from. Tax exclusive."
        },
        "productTaxCategoryCode": {
          "description": "Optional. Product tax category code in context. Product tax category determines the transaction tax rates applied to the product that will be factored into the price calculation. If not set, tax rates for the default product tax category will be used. Refer to the [Help Center article](https://support.google.com/googleplay/android-developer/answer/16408159) for more information.",
          "type": "string"
        }
      },
      "id": "ConvertRegionPricesRequest",
      "description": "Request message for ConvertRegionPrices.",
      "type": "object"
    },
    "CertificateHashes": {
      "id": "CertificateHashes",
      "type": "object",
      "description": "Hash digests of a certificate.",
      "properties": {
        "certificateHashSha256": {
          "type": "string",
          "description": "Hex-encoded SHA256 hash of the certificate. example: `94:49:C7:F3:A9:3C:F0:C5:5A:67:5D:DF:1C:83:73:2D:87:D5:62:55:E7:0B:15:0D:9E:6F:3C:F8:63:BB:7F:C1`"
        },
        "certificateHashMd5": {
          "type": "string",
          "description": "Hex-encoded MD5 hash of the certificate. example: `43:51:43:A1:B5:FC:8B:B7:0A:3A:A9:B1:0F:66:73:A8`"
        },
        "certificateHashSha1": {
          "description": "Hex-encoded SHA1 hash of the certificate. example: `86:61:97:1A:D5:EF:E5:74:1E:A7:5B:84:7C:68:37:65:CD:94:16:DE`",
          "type": "string"
        }
      }
    },
    "FreeTrialDetails": {
      "type": "object",
      "id": "FreeTrialDetails",
      "description": "Details of a free trial pricing phase.",
      "properties": {}
    },
    "CountryTargeting": {
      "description": "Country targeting specification.",
      "type": "object",
      "properties": {
        "includeRestOfWorld": {
          "description": "Include \"rest of world\" as well as explicitly targeted countries.",
          "type": "boolean"
        },
        "countries": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Countries to target, specified as two letter [CLDR codes](https://unicode.org/cldr/charts/latest/supplemental/territory_containment_un_m_49.html)."
        }
      },
      "id": "CountryTargeting"
    },
    "RentalDetails": {
      "type": "object",
      "description": "Details of a rental purchase.",
      "id": "RentalDetails",
      "properties": {}
    },
    "ScreenshotSet": {
      "type": "object",
      "id": "ScreenshotSet",
      "description": "A set of screenshots.",
      "properties": {
        "screenshots": {
          "description": "The image assets of the screenshots.",
          "items": {
            "$ref": "ImageAsset"
          },
          "type": "array"
        }
      }
    },
    "Timestamp": {
      "properties": {
        "seconds": {
          "format": "int64",
          "type": "string",
          "description": "Represents seconds of UTC time since Unix epoch."
        },
        "nanos": {
          "description": "Non-negative fractions of a second at nanosecond resolution. Must be from 0 to 999,999,999 inclusive.",
          "format": "int32",
          "type": "integer"
        }
      },
      "description": "A Timestamp represents a point in time independent of any time zone or local calendar, encoded as a count of seconds and fractions of seconds at nanosecond resolution. The count is relative to an epoch at UTC midnight on January 1, 1970.",
      "type": "object",
      "id": "Timestamp"
    },
    "RegionsVersion": {
      "id": "RegionsVersion",
      "properties": {
        "version": {
          "type": "string",
          "description": "Required. A string representing the version of available regions being used for the specified resource. Regional prices and latest supported version for the resource have to be specified according to the information published in [this article](https://support.google.com/googleplay/android-developer/answer/10532353). Each time the supported locations substantially change, the version will be incremented. Using this field will ensure that creating and updating the resource with an older region's version and set of regional prices and currencies will succeed even though a new version is available."
        }
      },
      "description": "The version of the available regions being used for the specified resource.",
      "type": "object"
    },
    "SubscriptionOffer": {
      "type": "object",
      "description": "A single, temporary offer",
      "id": "SubscriptionOffer",
      "properties": {
        "offerTags": {
          "type": "array",
          "items": {
            "$ref": "OfferTag"
          },
          "description": "List of up to 20 custom tags specified for this offer, and returned to the app through the billing library."
        },
        "packageName": {
          "type": "string",
          "description": "Required. Immutable. The package name of the app the parent subscription belongs to."
        },
        "state": {
          "type": "string",
          "description": "Output only. The current state of this offer. Can be changed using Activate and Deactivate actions. NB: the base plan state supersedes this state, so an active offer may not be available if the base plan is not active.",
          "enumDescriptions": [
            "Default value, should never be used.",
            "The subscription offer is not and has never been available to users.",
            "The subscription offer is available to new and existing users.",
            "The subscription offer is not available to new users. Existing users retain access."
          ],
          "enum": [
            "STATE_UNSPECIFIED",
            "DRAFT",
            "ACTIVE",
            "INACTIVE"
          ],
          "readOnly": true
        },
        "targeting": {
          "$ref": "SubscriptionOfferTargeting",
          "description": "The requirements that users need to fulfil to be eligible for this offer. Represents the requirements that Play will evaluate to decide whether an offer should be returned. Developers may further filter these offers themselves."
        },
        "phases": {
          "type": "array",
          "items": {
            "$ref": "SubscriptionOfferPhase"
          },
          "description": "Required. The phases of this subscription offer. Must contain at least one and at most two entries. Users will always receive all these phases in the specified order."
        },
        "regionalConfigs": {
          "description": "Required. The region-specific configuration of this offer. Must contain at least one entry.",
          "type": "array",
          "items": {
            "$ref": "RegionalSubscriptionOfferConfig"
          }
        },
        "offerId": {
          "description": "Required. Immutable. Unique ID of this subscription offer. Must be unique within the base plan.",
          "type": "string"
        },
        "otherRegionsConfig": {
          "$ref": "OtherRegionsSubscriptionOfferConfig",
          "description": "The configuration for any new locations Play may launch in the future."
        },
        "basePlanId": {
          "description": "Required. Immutable. The ID of the base plan to which this offer is an extension.",
          "type": "string"
        },
        "productId": {
          "type": "string",
          "description": "Required. Immutable. The ID of the parent subscription this offer belongs to."
        }
      }
    },
    "DeployAppRecoveryResponse": {
      "description": "Response message for DeployAppRecovery.",
      "properties": {},
      "type": "object",
      "id": "DeployAppRecoveryResponse"
    },
    "PolicyBooleanResponse": {
      "description": "Responses that will only ever be a boolean.",
      "id": "PolicyBooleanResponse",
      "type": "object",
      "properties": {
        "value": {
          "description": "Required. Provided boolean value.",
          "type": "boolean"
        }
      }
    },
    "ApkBinary": {
      "id": "ApkBinary",
      "type": "object",
      "description": "Represents the binary payload of an APK.",
      "properties": {
        "sha256": {
          "description": "A sha256 hash of the APK payload, encoded as a hex string and matching the output of the sha256sum command.",
          "type": "string"
        },
        "sha1": {
          "description": "A sha1 hash of the APK payload, encoded as a hex string and matching the output of the sha1sum command.",
          "type": "string"
        }
      }
    },
    "ExternalTransaction": {
      "id": "ExternalTransaction",
      "description": "The details of an external transaction.",
      "type": "object",
      "properties": {
        "createTime": {
          "readOnly": true,
          "description": "Output only. The time when this transaction was created. This is the time when Google was notified of the transaction.",
          "type": "string",
          "format": "google-datetime"
        },
        "transactionTime": {
          "format": "google-datetime",
          "description": "Required. The time when the transaction was completed.",
          "type": "string"
        },
        "currentPreTaxAmount": {
          "description": "Output only. The current transaction amount before tax. This represents the current pre-tax amount including any refunds that may have been applied to this transaction.",
          "readOnly": true,
          "$ref": "Price"
        },
        "externalOfferDetails": {
          "description": "Optional. Details necessary to accurately report external offers transactions.",
          "$ref": "ExternalOfferDetails"
        },
        "originalPreTaxAmount": {
          "description": "Required. The original transaction amount before taxes. This represents the pre-tax amount originally notified to Google before any refunds were applied.",
          "$ref": "Price"
        },
        "externalContentLinkDetails": {
          "description": "Optional. Details necessary to accurately report external content link transactions.",
          "$ref": "ExternalContentLinkDetails"
        },
        "transactionProgramCode": {
          "type": "integer",
          "description": "Optional. The transaction program code, used to help determine service fee for eligible apps participating in partner programs. Developers participating in the Play Media Experience Program (https://play.google.com/console/about/programs/mediaprogram/) must provide the program code when reporting alternative billing transactions. If you are an eligible developer, please contact your BDM for more information on how to set this field. Note: this field can not be used for external offers transactions.",
          "format": "int32"
        },
        "originalTaxAmount": {
          "$ref": "Price",
          "description": "Required. The original tax amount. This represents the tax amount originally notified to Google before any refunds were applied."
        },
        "externalTransactionId": {
          "description": "Output only. The id of this transaction. All transaction ids under the same package name must be unique. Set when creating the external transaction.",
          "type": "string",
          "readOnly": true
        },
        "transactionState": {
          "enumDescriptions": [
            "Unspecified transaction state. Not used.",
            "The transaction has been successfully reported to Google.",
            "The transaction has been fully refunded."
          ],
          "enum": [
            "TRANSACTION_STATE_UNSPECIFIED",
            "TRANSACTION_REPORTED",
            "TRANSACTION_CANCELED"
          ],
          "description": "Output only. The current state of the transaction.",
          "readOnly": true,
          "type": "string"
        },
        "recurringTransaction": {
          "$ref": "RecurringExternalTransaction",
          "description": "This transaction is part of a recurring series of transactions."
        },
        "packageName": {
          "description": "Output only. The resource name of the external transaction. The package name of the application the inapp products were sold (for example, 'com.some.app').",
          "type": "string",
          "readOnly": true
        },
        "oneTimeTransaction": {
          "description": "This is a one-time transaction and not part of a subscription.",
          "$ref": "OneTimeExternalTransaction"
        },
        "userTaxAddress": {
          "$ref": "ExternalTransactionAddress",
          "description": "Required. User address for tax computation."
        },
        "currentTaxAmount": {
          "$ref": "Price",
          "readOnly": true,
          "description": "Output only. The current tax amount. This represents the current tax amount including any refunds that may have been applied to this transaction."
        },
        "testPurchase": {
          "description": "Output only. If set, this transaction was a test purchase. Google will not charge for a test transaction.",
          "readOnly": true,
          "$ref": "ExternalTransactionTestPurchase"
        }
      }
    },
    "BatchUpdateBasePlanStatesResponse": {
      "id": "BatchUpdateBasePlanStatesResponse",
      "properties": {
        "subscriptions": {
          "items": {
            "$ref": "Subscription"
          },
          "type": "array",
          "description": "The list of updated subscriptions. This list will match the requests one to one, in the same order."
        }
      },
      "type": "object",
      "description": "Response message for BatchUpdateBasePlanStates."
    },
    "SystemInitiatedCancellation": {
      "properties": {},
      "id": "SystemInitiatedCancellation",
      "type": "object",
      "description": "Information specific to cancellations initiated by Google system."
    },
    "SafetyLabelsUpdateRequest": {
      "properties": {
        "safetyLabels": {
          "type": "string",
          "description": "Required. Contents of the CSV file containing Data Safety responses. For the format of this file, see the Help Center documentation at https://support.google.com/googleplay/android-developer/answer/10787469?#zippy=%2Cunderstand-the-csv-format To download an up to date template, follow the steps at https://support.google.com/googleplay/android-developer/answer/10787469?#zippy=%2Cexport-to-a-csv-file"
        }
      },
      "type": "object",
      "id": "SafetyLabelsUpdateRequest",
      "description": "Request to update Safety Labels of an app."
    },
    "SdkVersionTargeting": {
      "type": "object",
      "id": "SdkVersionTargeting",
      "description": "Targeting based on sdk version.",
      "properties": {
        "value": {
          "items": {
            "$ref": "SdkVersion"
          },
          "type": "array",
          "description": "Value of an sdk version."
        },
        "alternatives": {
          "description": "Targeting of other sibling directories that were in the Bundle. For main splits this is targeting of other main splits.",
          "type": "array",
          "items": {
            "$ref": "SdkVersion"
          }
        }
      }
    },
    "OneTimeCode": {
      "id": "OneTimeCode",
      "type": "object",
      "properties": {},
      "description": "A single use promotion code."
    },
    "PartialRefund": {
      "id": "PartialRefund",
      "description": "A partial refund of a transaction.",
      "properties": {
        "refundId": {
          "type": "string",
          "description": "Required. A unique id distinguishing this partial refund. If the refund is successful, subsequent refunds with the same id will fail. Must be unique across refunds for one individual transaction."
        },
        "refundPreTaxAmount": {
          "description": "Required. The pre-tax amount of the partial refund. Should be less than the remaining pre-tax amount of the transaction.",
          "$ref": "Price"
        }
      },
      "type": "object"
    }
  },
  "auth": {
    "oauth2": {
      "scopes": {
        "https://www.googleapis.com/auth/androidpublisher": {
          "description": "View and manage your Google Play Developer account"
        }
      }
    }
  },
  "kind": "discovery#restDescription",
  "canonicalName": "Android Publisher",
  "description": "Lets Android application developers access their Google Play accounts. At a high level, the expected workflow is to \"insert\" an Edit, make changes as necessary, and then \"commit\" it. ",
  "discoveryVersion": "v1",
  "parameters": {
    "access_token": {
      "type": "string",
      "description": "OAuth access token.",
      "location": "query"
    },
    "callback": {
      "location": "query",
      "type": "string",
      "description": "JSONP"
    },
    "key": {
      "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.",
      "location": "query",
      "type": "string"
    },
    "alt": {
      "type": "string",
      "default": "json",
      "description": "Data format for response.",
      "enumDescriptions": [
        "Responses with Content-Type of application/json",
        "Media download with context-dependent Content-Type",
        "Responses with Content-Type of application/x-protobuf"
      ],
      "enum": [
        "json",
        "media",
        "proto"
      ],
      "location": "query"
    },
    "$.xgafv": {
      "enum": [
        "1",
        "2"
      ],
      "enumDescriptions": [
        "v1 error format",
        "v2 error format"
      ],
      "description": "V1 error format.",
      "type": "string",
      "location": "query"
    },
    "uploadType": {
      "type": "string",
      "description": "Legacy upload protocol for media (e.g. \"media\", \"multipart\").",
      "location": "query"
    },
    "quotaUser": {
      "type": "string",
      "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters.",
      "location": "query"
    },
    "fields": {
      "location": "query",
      "description": "Selector specifying which fields to include in a partial response.",
      "type": "string"
    },
    "prettyPrint": {
      "type": "boolean",
      "description": "Returns response with indentations and line breaks.",
      "location": "query",
      "default": "true"
    },
    "upload_protocol": {
      "description": "Upload protocol for media (e.g. \"raw\", \"multipart\").",
      "type": "string",
      "location": "query"
    },
    "oauth_token": {
      "location": "query",
      "description": "OAuth 2.0 token for the current user.",
      "type": "string"
    }
  },
  "version": "v3",
  "protocol": "rest",
  "resources": {
    "appsigning": {
      "methods": {
        "enrollApp": {
          "id": "androidpublisher.appsigning.enrollApp",
          "parameterOrder": [
            "name"
          ],
          "parameters": {
            "name": {
              "type": "string",
              "description": "Required. Either package name or app ID of the app enrolling in Play Signing.",
              "required": true,
              "location": "path"
            }
          },
          "flatPath": "androidpublisher/v3/applications/{name}/appSigning:enrollApp",
          "path": "androidpublisher/v3/applications/{name}/appSigning:enrollApp",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "response": {
            "$ref": "EnrollAppResponse"
          },
          "httpMethod": "POST",
          "request": {
            "$ref": "EnrollAppRequest"
          },
          "description": "Enrolls an app in Play App Signing using a self-hosted Google Cloud KMS key. Warning: Do not use this method for standard Play App Signing enrollment. * Standard enrollment with Google-generated or Google-managed keys cannot be done via API. * This advanced API is strictly for enterprise organizations with mandatory compliance, regulatory, or policy requirements to retain key custody in an external Google Cloud KMS instance. * Prerequisites: Requires an active, properly configured Google Cloud KMS key with appropriate IAM permissions granted to Google Play before calling this method. See Help Center: https://support.google.com/googleplay/android-developer/answer/9842756"
        },
        "rotateAppSigningKey": {
          "response": {
            "$ref": "RotateAppSigningKeyResponse"
          },
          "description": "Rotates an app's signing key to a new self-hosted Google Cloud KMS key. Warning: This method only applies to apps enrolled with self-hosted Cloud KMS keys. For apps using standard Google-managed Play App Signing, key rotation requests must be initiated through the Google Play Console UI. See Help Center: https://support.google.com/googleplay/android-developer/answer/9842756",
          "request": {
            "$ref": "RotateAppSigningKeyRequest"
          },
          "httpMethod": "POST",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "id": "androidpublisher.appsigning.rotateAppSigningKey",
          "parameterOrder": [
            "name"
          ],
          "path": "androidpublisher/v3/applications/{name}/appSigning:rotateAppSigningKey",
          "parameters": {
            "name": {
              "required": true,
              "description": "Required. Either package name or app ID of the app rotating the signing key.",
              "location": "path",
              "type": "string"
            }
          },
          "flatPath": "androidpublisher/v3/applications/{name}/appSigning:rotateAppSigningKey"
        }
      }
    },
    "applications": {
      "methods": {
        "dataSafety": {
          "parameters": {
            "packageName": {
              "required": true,
              "type": "string",
              "description": "Required. Package name of the app.",
              "location": "path"
            }
          },
          "flatPath": "androidpublisher/v3/applications/{packageName}/dataSafety",
          "id": "androidpublisher.applications.dataSafety",
          "description": "Writes the Safety Labels declaration of an app.",
          "path": "androidpublisher/v3/applications/{packageName}/dataSafety",
          "httpMethod": "POST",
          "response": {
            "$ref": "SafetyLabelsUpdateResponse"
          },
          "request": {
            "$ref": "SafetyLabelsUpdateRequest"
          },
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "parameterOrder": [
            "packageName"
          ]
        }
      },
      "resources": {
        "tracks": {
          "resources": {
            "releases": {
              "methods": {
                "list": {
                  "flatPath": "androidpublisher/v3/applications/{applicationsId}/tracks/{tracksId}/releases",
                  "id": "androidpublisher.applications.tracks.releases.list",
                  "description": "Returns the list of all releases for a given track. This excludes any releases that are obsolete.",
                  "httpMethod": "GET",
                  "path": "androidpublisher/v3/{+parent}/releases",
                  "parameterOrder": [
                    "parent"
                  ],
                  "response": {
                    "$ref": "ListReleaseSummariesResponse"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/androidpublisher"
                  ],
                  "parameters": {
                    "parent": {
                      "location": "path",
                      "description": "Required. The parent track, which owns this collection of releases. Format: applications/{package_name}/tracks/{track}",
                      "type": "string",
                      "required": true,
                      "pattern": "^applications/[^/]+/tracks/[^/]+$"
                    }
                  }
                }
              }
            }
          }
        },
        "deviceTierConfigs": {
          "methods": {
            "create": {
              "description": "Creates a new device tier config for an app.",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "httpMethod": "POST",
              "response": {
                "$ref": "DeviceTierConfig"
              },
              "request": {
                "$ref": "DeviceTierConfig"
              },
              "path": "androidpublisher/v3/applications/{packageName}/deviceTierConfigs",
              "parameters": {
                "allowUnknownDevices": {
                  "type": "boolean",
                  "location": "query",
                  "description": "Whether the service should accept device IDs that are unknown to Play's device catalog."
                },
                "packageName": {
                  "location": "path",
                  "description": "Package name of the app.",
                  "type": "string",
                  "required": true
                }
              },
              "flatPath": "androidpublisher/v3/applications/{packageName}/deviceTierConfigs",
              "parameterOrder": [
                "packageName"
              ],
              "id": "androidpublisher.applications.deviceTierConfigs.create"
            },
            "list": {
              "httpMethod": "GET",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "description": "Returns created device tier configs, ordered by descending creation time.",
              "flatPath": "androidpublisher/v3/applications/{packageName}/deviceTierConfigs",
              "id": "androidpublisher.applications.deviceTierConfigs.list",
              "response": {
                "$ref": "ListDeviceTierConfigsResponse"
              },
              "path": "androidpublisher/v3/applications/{packageName}/deviceTierConfigs",
              "parameters": {
                "packageName": {
                  "description": "Package name of the app.",
                  "required": true,
                  "type": "string",
                  "location": "path"
                },
                "pageSize": {
                  "type": "integer",
                  "format": "int32",
                  "description": "The maximum number of device tier configs to return. The service may return fewer than this value. If unspecified, at most 10 device tier configs will be returned. The maximum value for this field is 100; values above 100 will be coerced to 100. Device tier configs will be ordered by descending creation time.",
                  "location": "query"
                },
                "pageToken": {
                  "description": "A page token, received from a previous `ListDeviceTierConfigs` call. Provide this to retrieve the subsequent page.",
                  "type": "string",
                  "location": "query"
                }
              },
              "parameterOrder": [
                "packageName"
              ]
            },
            "get": {
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "parameters": {
                "deviceTierConfigId": {
                  "required": true,
                  "description": "Required. Id of an existing device tier config.",
                  "type": "string",
                  "format": "int64",
                  "location": "path"
                },
                "packageName": {
                  "type": "string",
                  "required": true,
                  "description": "Package name of the app.",
                  "location": "path"
                }
              },
              "flatPath": "androidpublisher/v3/applications/{packageName}/deviceTierConfigs/{deviceTierConfigId}",
              "description": "Returns a particular device tier config.",
              "id": "androidpublisher.applications.deviceTierConfigs.get",
              "parameterOrder": [
                "packageName",
                "deviceTierConfigId"
              ],
              "path": "androidpublisher/v3/applications/{packageName}/deviceTierConfigs/{deviceTierConfigId}",
              "response": {
                "$ref": "DeviceTierConfig"
              },
              "httpMethod": "GET"
            }
          }
        }
      }
    },
    "generatedapks": {
      "methods": {
        "list": {
          "httpMethod": "GET",
          "parameterOrder": [
            "packageName",
            "versionCode"
          ],
          "description": "Returns download metadata for all APKs that were generated from a given app bundle.",
          "flatPath": "androidpublisher/v3/applications/{packageName}/generatedApks/{versionCode}",
          "path": "androidpublisher/v3/applications/{packageName}/generatedApks/{versionCode}",
          "response": {
            "$ref": "GeneratedApksListResponse"
          },
          "parameters": {
            "packageName": {
              "location": "path",
              "description": "Package name of the app.",
              "required": true,
              "type": "string"
            },
            "versionCode": {
              "required": true,
              "format": "int32",
              "description": "Version code of the app bundle.",
              "type": "integer",
              "location": "path"
            }
          },
          "id": "androidpublisher.generatedapks.list",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ]
        },
        "download": {
          "supportsMediaDownload": true,
          "description": "Downloads a single signed APK generated from an app bundle.",
          "parameterOrder": [
            "packageName",
            "versionCode",
            "downloadId"
          ],
          "id": "androidpublisher.generatedapks.download",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "httpMethod": "GET",
          "useMediaDownloadService": true,
          "parameters": {
            "downloadId": {
              "type": "string",
              "description": "Download ID, which uniquely identifies the APK to download. Can be obtained from the response of `generatedapks.list` method.",
              "location": "path",
              "required": true
            },
            "packageName": {
              "required": true,
              "description": "Package name of the app.",
              "type": "string",
              "location": "path"
            },
            "versionCode": {
              "location": "path",
              "type": "integer",
              "format": "int32",
              "description": "Version code of the app bundle.",
              "required": true
            }
          },
          "path": "androidpublisher/v3/applications/{packageName}/generatedApks/{versionCode}/downloads/{downloadId}:download",
          "flatPath": "androidpublisher/v3/applications/{packageName}/generatedApks/{versionCode}/downloads/{downloadId}:download"
        }
      }
    },
    "inappproducts": {
      "methods": {
        "update": {
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "parameters": {
            "packageName": {
              "description": "Package name of the app.",
              "location": "path",
              "required": true,
              "type": "string"
            },
            "latencyTolerance": {
              "type": "string",
              "enum": [
                "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
                "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
                "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
              ],
              "description": "Optional. The latency tolerance for the propagation of this product update. Defaults to latency-sensitive.",
              "location": "query",
              "enumDescriptions": [
                "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
                "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
                "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
              ]
            },
            "allowMissing": {
              "type": "boolean",
              "description": "If set to true, and the in-app product with the given package_name and sku doesn't exist, the in-app product will be created.",
              "location": "query"
            },
            "sku": {
              "location": "path",
              "description": "Unique identifier for the in-app product.",
              "type": "string",
              "required": true
            },
            "autoConvertMissingPrices": {
              "description": "If true the prices for all regions targeted by the parent app that don't have a price specified for this in-app product will be auto converted to the target currency based on the default price. Defaults to false.",
              "location": "query",
              "type": "boolean"
            }
          },
          "description": "Updates an in-app product (a managed product or a subscription). This method should no longer be used to update subscriptions. See [this article](https://android-developers.googleblog.com/2023/06/changes-to-google-play-developer-api-june-2023.html) for more information.",
          "response": {
            "$ref": "InAppProduct"
          },
          "request": {
            "$ref": "InAppProduct"
          },
          "path": "androidpublisher/v3/applications/{packageName}/inappproducts/{sku}",
          "id": "androidpublisher.inappproducts.update",
          "flatPath": "androidpublisher/v3/applications/{packageName}/inappproducts/{sku}",
          "parameterOrder": [
            "packageName",
            "sku"
          ],
          "httpMethod": "PUT"
        },
        "get": {
          "parameterOrder": [
            "packageName",
            "sku"
          ],
          "parameters": {
            "packageName": {
              "type": "string",
              "required": true,
              "description": "Package name of the app.",
              "location": "path"
            },
            "sku": {
              "location": "path",
              "description": "Unique identifier for the in-app product.",
              "type": "string",
              "required": true
            }
          },
          "response": {
            "$ref": "InAppProduct"
          },
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "description": "Gets an in-app product, which can be a managed product or a subscription. This method should no longer be used to retrieve subscriptions. See [this article](https://android-developers.googleblog.com/2023/06/changes-to-google-play-developer-api-june-2023.html) for more information.",
          "id": "androidpublisher.inappproducts.get",
          "flatPath": "androidpublisher/v3/applications/{packageName}/inappproducts/{sku}",
          "path": "androidpublisher/v3/applications/{packageName}/inappproducts/{sku}",
          "httpMethod": "GET"
        },
        "insert": {
          "response": {
            "$ref": "InAppProduct"
          },
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "description": "Creates an in-app product (a managed product or a subscription). This method should no longer be used to create subscriptions. See [this article](https://android-developers.googleblog.com/2023/06/changes-to-google-play-developer-api-june-2023.html) for more information.",
          "httpMethod": "POST",
          "id": "androidpublisher.inappproducts.insert",
          "parameterOrder": [
            "packageName"
          ],
          "path": "androidpublisher/v3/applications/{packageName}/inappproducts",
          "flatPath": "androidpublisher/v3/applications/{packageName}/inappproducts",
          "parameters": {
            "packageName": {
              "location": "path",
              "description": "Package name of the app.",
              "required": true,
              "type": "string"
            },
            "autoConvertMissingPrices": {
              "description": "If true the prices for all regions targeted by the parent app that don't have a price specified for this in-app product will be auto converted to the target currency based on the default price. Defaults to false.",
              "location": "query",
              "type": "boolean"
            }
          },
          "request": {
            "$ref": "InAppProduct"
          }
        },
        "batchGet": {
          "description": "Reads multiple in-app products, which can be managed products or subscriptions. This method should not be used to retrieve subscriptions. See [this article](https://android-developers.googleblog.com/2023/06/changes-to-google-play-developer-api-june-2023.html) for more information.",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "parameters": {
            "sku": {
              "description": "Unique identifier for the in-app products.",
              "type": "string",
              "location": "query",
              "repeated": true
            },
            "packageName": {
              "required": true,
              "location": "path",
              "description": "Package name of the app.",
              "type": "string"
            }
          },
          "parameterOrder": [
            "packageName"
          ],
          "response": {
            "$ref": "InappproductsBatchGetResponse"
          },
          "path": "androidpublisher/v3/applications/{packageName}/inappproducts:batchGet",
          "flatPath": "androidpublisher/v3/applications/{packageName}/inappproducts:batchGet",
          "id": "androidpublisher.inappproducts.batchGet",
          "httpMethod": "GET"
        },
        "batchUpdate": {
          "path": "androidpublisher/v3/applications/{packageName}/inappproducts:batchUpdate",
          "flatPath": "androidpublisher/v3/applications/{packageName}/inappproducts:batchUpdate",
          "httpMethod": "POST",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "description": "Updates or inserts one or more in-app products (managed products or subscriptions). Set the latencyTolerance field on nested requests to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT to achieve maximum update throughput. This method should no longer be used to update subscriptions. See [this article](https://android-developers.googleblog.com/2023/06/changes-to-google-play-developer-api-june-2023.html) for more information.",
          "request": {
            "$ref": "InappproductsBatchUpdateRequest"
          },
          "parameters": {
            "packageName": {
              "required": true,
              "type": "string",
              "location": "path",
              "description": "Package name of the app."
            }
          },
          "id": "androidpublisher.inappproducts.batchUpdate",
          "response": {
            "$ref": "InappproductsBatchUpdateResponse"
          },
          "parameterOrder": [
            "packageName"
          ]
        },
        "patch": {
          "path": "androidpublisher/v3/applications/{packageName}/inappproducts/{sku}",
          "id": "androidpublisher.inappproducts.patch",
          "httpMethod": "PATCH",
          "response": {
            "$ref": "InAppProduct"
          },
          "parameterOrder": [
            "packageName",
            "sku"
          ],
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "description": "Patches an in-app product (a managed product or a subscription). This method should no longer be used to update subscriptions. See [this article](https://android-developers.googleblog.com/2023/06/changes-to-google-play-developer-api-june-2023.html) for more information.",
          "flatPath": "androidpublisher/v3/applications/{packageName}/inappproducts/{sku}",
          "parameters": {
            "packageName": {
              "description": "Package name of the app.",
              "required": true,
              "type": "string",
              "location": "path"
            },
            "latencyTolerance": {
              "enumDescriptions": [
                "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
                "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
                "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
              ],
              "type": "string",
              "description": "Optional. The latency tolerance for the propagation of this product update. Defaults to latency-sensitive.",
              "location": "query",
              "enum": [
                "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
                "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
                "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
              ]
            },
            "autoConvertMissingPrices": {
              "location": "query",
              "description": "If true the prices for all regions targeted by the parent app that don't have a price specified for this in-app product will be auto converted to the target currency based on the default price. Defaults to false.",
              "type": "boolean"
            },
            "sku": {
              "location": "path",
              "required": true,
              "description": "Unique identifier for the in-app product.",
              "type": "string"
            }
          },
          "request": {
            "$ref": "InAppProduct"
          }
        },
        "batchDelete": {
          "id": "androidpublisher.inappproducts.batchDelete",
          "path": "androidpublisher/v3/applications/{packageName}/inappproducts:batchDelete",
          "httpMethod": "POST",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "description": "Deletes in-app products (managed products or subscriptions). Set the latencyTolerance field on nested requests to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT to achieve maximum update throughput. This method should not be used to delete subscriptions. See [this article](https://android-developers.googleblog.com/2023/06/changes-to-google-play-developer-api-june-2023.html) for more information.",
          "request": {
            "$ref": "InappproductsBatchDeleteRequest"
          },
          "parameterOrder": [
            "packageName"
          ],
          "parameters": {
            "packageName": {
              "location": "path",
              "type": "string",
              "description": "Package name of the app.",
              "required": true
            }
          },
          "flatPath": "androidpublisher/v3/applications/{packageName}/inappproducts:batchDelete"
        },
        "delete": {
          "parameterOrder": [
            "packageName",
            "sku"
          ],
          "flatPath": "androidpublisher/v3/applications/{packageName}/inappproducts/{sku}",
          "httpMethod": "DELETE",
          "id": "androidpublisher.inappproducts.delete",
          "description": "Deletes an in-app product (a managed product or a subscription). This method should no longer be used to delete subscriptions. See [this article](https://android-developers.googleblog.com/2023/06/changes-to-google-play-developer-api-june-2023.html) for more information.",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "parameters": {
            "latencyTolerance": {
              "location": "query",
              "enum": [
                "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
                "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
                "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
              ],
              "description": "Optional. The latency tolerance for the propagation of this product update. Defaults to latency-sensitive.",
              "type": "string",
              "enumDescriptions": [
                "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
                "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
                "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
              ]
            },
            "sku": {
              "location": "path",
              "required": true,
              "type": "string",
              "description": "Unique identifier for the in-app product."
            },
            "packageName": {
              "location": "path",
              "type": "string",
              "description": "Package name of the app.",
              "required": true
            }
          },
          "path": "androidpublisher/v3/applications/{packageName}/inappproducts/{sku}"
        },
        "list": {
          "response": {
            "$ref": "InappproductsListResponse"
          },
          "id": "androidpublisher.inappproducts.list",
          "parameters": {
            "token": {
              "type": "string",
              "description": "Pagination token. If empty, list starts at the first product.",
              "location": "query"
            },
            "startIndex": {
              "format": "uint32",
              "location": "query",
              "description": "Deprecated and ignored. Set the `token` parameter to retrieve the next page.",
              "type": "integer",
              "deprecated": true
            },
            "packageName": {
              "location": "path",
              "description": "Package name of the app.",
              "required": true,
              "type": "string"
            },
            "maxResults": {
              "description": "Deprecated and ignored. The page size is determined by the server.",
              "location": "query",
              "type": "integer",
              "format": "uint32",
              "deprecated": true
            }
          },
          "path": "androidpublisher/v3/applications/{packageName}/inappproducts",
          "httpMethod": "GET",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "description": "Lists all in-app products - both managed products and subscriptions. If an app has a large number of in-app products, the response may be paginated. In this case the response field `tokenPagination.nextPageToken` will be set and the caller should provide its value as a `token` request parameter to retrieve the next page. This method should no longer be used to retrieve subscriptions. See [this article](https://android-developers.googleblog.com/2023/06/changes-to-google-play-developer-api-june-2023.html) for more information.",
          "flatPath": "androidpublisher/v3/applications/{packageName}/inappproducts",
          "parameterOrder": [
            "packageName"
          ]
        }
      }
    },
    "appstoreappsreview": {
      "methods": {
        "uploadapk": {
          "httpMethod": "POST",
          "parameterOrder": [
            "appStorePackageName",
            "packageName"
          ],
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "request": {
            "$ref": "UploadApkRequest"
          },
          "description": "Upload an APK file for the hosted app. Returns an ID to track this APK.",
          "mediaUpload": {
            "protocols": {
              "resumable": {
                "path": "/resumable/upload/androidpublisher/v3/appstore/{appStorePackageName}/apps/{packageName}/apks:upload",
                "multipart": true
              },
              "simple": {
                "multipart": true,
                "path": "/upload/androidpublisher/v3/appstore/{appStorePackageName}/apps/{packageName}/apks:upload"
              }
            },
            "accept": [
              "application/octet-stream",
              "application/vnd.android.package-archive"
            ],
            "maxSize": "10737418240"
          },
          "flatPath": "androidpublisher/v3/appstore/{appStorePackageName}/apps/{packageName}/apks:upload",
          "path": "androidpublisher/v3/appstore/{appStorePackageName}/apps/{packageName}/apks:upload",
          "supportsMediaUpload": true,
          "response": {
            "$ref": "UploadApkResponse"
          },
          "parameters": {
            "packageName": {
              "type": "string",
              "description": "Required. Package name of the app.",
              "location": "path",
              "required": true
            },
            "appStorePackageName": {
              "required": true,
              "description": "Required. Package name of the third-party app store.",
              "location": "path",
              "type": "string"
            }
          },
          "id": "androidpublisher.appstoreappsreview.uploadapk"
        },
        "updateappstorehostedapp": {
          "request": {
            "$ref": "UpdateAppStoreHostedAppRequest"
          },
          "parameters": {
            "appStorePackageName": {
              "type": "string",
              "location": "path",
              "required": true,
              "description": "Required. Package name of the third-party app store."
            }
          },
          "id": "androidpublisher.appstoreappsreview.updateappstorehostedapp",
          "response": {
            "$ref": "UpdateAppStoreHostedAppResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "httpMethod": "POST",
          "parameterOrder": [
            "appStorePackageName"
          ],
          "path": "androidpublisher/v3/appstore/{appStorePackageName}/apps:update",
          "description": "Updates details for an app hosted on an app store. Use this to provide details for a new app, or to update details for an existing app. The update will be sent for review immediately after creation.",
          "flatPath": "androidpublisher/v3/appstore/{appStorePackageName}/apps:update"
        },
        "uploadimage": {
          "httpMethod": "POST",
          "response": {
            "$ref": "UploadImageResponse"
          },
          "path": "androidpublisher/v3/appstore/{appStorePackageName}/apps/{packageName}/images:upload",
          "parameterOrder": [
            "appStorePackageName",
            "packageName"
          ],
          "id": "androidpublisher.appstoreappsreview.uploadimage",
          "request": {
            "$ref": "UploadImageRequest"
          },
          "supportsMediaUpload": true,
          "mediaUpload": {
            "accept": [
              "image/*"
            ],
            "protocols": {
              "resumable": {
                "multipart": true,
                "path": "/resumable/upload/androidpublisher/v3/appstore/{appStorePackageName}/apps/{packageName}/images:upload"
              },
              "simple": {
                "path": "/upload/androidpublisher/v3/appstore/{appStorePackageName}/apps/{packageName}/images:upload",
                "multipart": true
              }
            },
            "maxSize": "15728640"
          },
          "parameters": {
            "appStorePackageName": {
              "type": "string",
              "required": true,
              "description": "Required. Package name of the third-party app store.",
              "location": "path"
            },
            "packageName": {
              "location": "path",
              "type": "string",
              "required": true,
              "description": "Required. Package name of the app."
            }
          },
          "description": "Upload a screenshot or app icon for the hosted app. Returns an ID to track the image.",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "flatPath": "androidpublisher/v3/appstore/{appStorePackageName}/apps/{packageName}/images:upload"
        },
        "uploadappstoreapppolicydeclarationfile": {
          "id": "androidpublisher.appstoreappsreview.uploadappstoreapppolicydeclarationfile",
          "parameters": {
            "packageName": {
              "type": "string",
              "description": "Required. Package name of the app.",
              "location": "path",
              "required": true
            },
            "appStorePackageName": {
              "required": true,
              "description": "Required. Package name of the third-party app store.",
              "type": "string",
              "location": "path"
            }
          },
          "parameterOrder": [
            "appStorePackageName",
            "packageName"
          ],
          "mediaUpload": {
            "maxSize": "10485760",
            "accept": [
              "application/pdf",
              "image/jpeg",
              "image/png"
            ],
            "protocols": {
              "simple": {
                "multipart": true,
                "path": "/upload/androidpublisher/v3/appstore/{appStorePackageName}/apps/{packageName}/policyDeclarationFiles:upload"
              },
              "resumable": {
                "multipart": true,
                "path": "/resumable/upload/androidpublisher/v3/appstore/{appStorePackageName}/apps/{packageName}/policyDeclarationFiles:upload"
              }
            }
          },
          "response": {
            "$ref": "UploadAppStoreAppPolicyDeclarationFileResponse"
          },
          "description": "Upload a policy declaration file for the hosted app. Returns an ID to track the file.",
          "supportsMediaUpload": true,
          "flatPath": "androidpublisher/v3/appstore/{appStorePackageName}/apps/{packageName}/policyDeclarationFiles:upload",
          "request": {
            "$ref": "UploadAppStoreAppPolicyDeclarationFileRequest"
          },
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "path": "androidpublisher/v3/appstore/{appStorePackageName}/apps/{packageName}/policyDeclarationFiles:upload",
          "httpMethod": "POST"
        },
        "createappstorehostedapp": {
          "path": "androidpublisher/v3/appstore/{appStorePackageName}/apps:create",
          "httpMethod": "POST",
          "parameterOrder": [
            "appStorePackageName"
          ],
          "response": {
            "$ref": "CreateAppStoreHostedAppResponse"
          },
          "flatPath": "androidpublisher/v3/appstore/{appStorePackageName}/apps:create",
          "description": "Creates an app store hosted app. This must be called before any other RPCs for this hosted app.",
          "request": {
            "$ref": "CreateAppStoreHostedAppRequest"
          },
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "id": "androidpublisher.appstoreappsreview.createappstorehostedapp",
          "parameters": {
            "appStorePackageName": {
              "description": "Required. Package name of the third-party app store.",
              "required": true,
              "type": "string",
              "location": "path"
            }
          }
        },
        "updateappstorehostedapppublishstatus": {
          "response": {
            "$ref": "UpdateAppStoreHostedAppPublishStatusResponse"
          },
          "path": "androidpublisher/v3/appstore/{appStorePackageName}/apps/{packageName}:updateAppStoreHostedAppPublishStatus",
          "parameters": {
            "appStorePackageName": {
              "required": true,
              "description": "Required. Package name of the third-party app store.",
              "location": "path",
              "type": "string"
            },
            "packageName": {
              "required": true,
              "description": "Required. Package name of the app.",
              "type": "string",
              "location": "path"
            }
          },
          "request": {
            "$ref": "UpdateAppStoreHostedAppPublishStatusRequest"
          },
          "parameterOrder": [
            "appStorePackageName",
            "packageName"
          ],
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "description": "Updates the publish status of an app store hosted app. The default state after calling UpdateAppStoreHostedApp is PUBLISHED. It is not necessary to call this RPC explicitly to set an app to PUBLISHED.",
          "flatPath": "androidpublisher/v3/appstore/{appStorePackageName}/apps/{packageName}:updateAppStoreHostedAppPublishStatus",
          "id": "androidpublisher.appstoreappsreview.updateappstorehostedapppublishstatus",
          "httpMethod": "POST"
        }
      }
    },
    "appstorecatalog": {
      "resources": {
        "recentupdateevents": {
          "methods": {
            "list": {
              "id": "androidpublisher.appstorecatalog.recentupdateevents.list",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "parameters": {
                "pageSize": {
                  "description": "Optional. The maximum number of update events to return. The service may return fewer than this value. If unspecified, at most 100 update events will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.",
                  "location": "query",
                  "type": "integer",
                  "format": "int32"
                },
                "pageToken": {
                  "type": "string",
                  "description": "Optional. A page token, received from a previous `ListRecentUpdateEvents` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListRecentUpdateEvents` must match the call that provided the page token.",
                  "location": "query"
                },
                "startTime": {
                  "location": "query",
                  "format": "google-datetime",
                  "type": "string",
                  "description": "Required. The start time of the range (inclusive)."
                },
                "endTime": {
                  "format": "google-datetime",
                  "description": "Required. The end time of the range (exclusive).",
                  "type": "string",
                  "location": "query"
                },
                "appStorePackageName": {
                  "location": "path",
                  "type": "string",
                  "required": true,
                  "description": "Required. The package name of the app store on behalf of which the request is made."
                }
              },
              "flatPath": "androidpublisher/v3/appstorecatalog/{appStorePackageName}/recentUpdateEvents",
              "response": {
                "$ref": "ListRecentUpdateEventsResponse"
              },
              "path": "androidpublisher/v3/appstorecatalog/{appStorePackageName}/recentUpdateEvents",
              "parameterOrder": [
                "appStorePackageName"
              ],
              "description": "Lists update events for eligible apps in the given time range.",
              "httpMethod": "GET"
            }
          }
        },
        "recentappviews": {
          "methods": {
            "get": {
              "path": "androidpublisher/v3/appstorecatalog/{appStorePackageName}/recentAppViews/{playAppPackageName}",
              "description": "Returns metadata about a recently updated app.",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "httpMethod": "GET",
              "flatPath": "androidpublisher/v3/appstorecatalog/{appStorePackageName}/recentAppViews/{playAppPackageName}",
              "id": "androidpublisher.appstorecatalog.recentappviews.get",
              "response": {
                "$ref": "RecentAppView"
              },
              "parameterOrder": [
                "appStorePackageName",
                "playAppPackageName"
              ],
              "parameters": {
                "playAppPackageName": {
                  "required": true,
                  "type": "string",
                  "description": "Required. The package name of the requested Play app.",
                  "location": "path"
                },
                "appStorePackageName": {
                  "location": "path",
                  "type": "string",
                  "description": "Required. The package name of the app store on behalf of which the request is made.",
                  "required": true
                }
              }
            }
          }
        }
      }
    },
    "users": {
      "methods": {
        "delete": {
          "httpMethod": "DELETE",
          "description": "Removes all access for the user to the given developer account.",
          "flatPath": "androidpublisher/v3/developers/{developersId}/users/{usersId}",
          "path": "androidpublisher/v3/{+name}",
          "parameters": {
            "name": {
              "location": "path",
              "pattern": "^developers/[^/]+/users/[^/]+$",
              "type": "string",
              "required": true,
              "description": "Required. The name of the user to delete. Format: developers/{developer}/users/{email}"
            }
          },
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "id": "androidpublisher.users.delete",
          "parameterOrder": [
            "name"
          ]
        },
        "create": {
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "httpMethod": "POST",
          "id": "androidpublisher.users.create",
          "path": "androidpublisher/v3/{+parent}/users",
          "flatPath": "androidpublisher/v3/developers/{developersId}/users",
          "parameterOrder": [
            "parent"
          ],
          "response": {
            "$ref": "User"
          },
          "parameters": {
            "parent": {
              "type": "string",
              "required": true,
              "pattern": "^developers/[^/]+$",
              "description": "Required. The developer account to add the user to. Format: developers/{developer}",
              "location": "path"
            }
          },
          "description": "Grant access for a user to the given developer account.",
          "request": {
            "$ref": "User"
          }
        },
        "patch": {
          "request": {
            "$ref": "User"
          },
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "parameterOrder": [
            "name"
          ],
          "response": {
            "$ref": "User"
          },
          "parameters": {
            "name": {
              "required": true,
              "pattern": "^developers/[^/]+/users/[^/]+$",
              "type": "string",
              "location": "path",
              "description": "Required. Resource name for this user, following the pattern \"developers/{developer}/users/{email}\"."
            },
            "updateMask": {
              "type": "string",
              "description": "Optional. The list of fields to be updated.",
              "format": "google-fieldmask",
              "location": "query"
            }
          },
          "id": "androidpublisher.users.patch",
          "httpMethod": "PATCH",
          "flatPath": "androidpublisher/v3/developers/{developersId}/users/{usersId}",
          "path": "androidpublisher/v3/{+name}",
          "description": "Updates access for the user to the developer account."
        },
        "list": {
          "parameters": {
            "parent": {
              "required": true,
              "description": "Required. The developer account to fetch users from. Format: developers/{developer}",
              "type": "string",
              "pattern": "^developers/[^/]+$",
              "location": "path"
            },
            "pageSize": {
              "description": "The maximum number of results to return. This must be set to -1 to disable pagination.",
              "location": "query",
              "format": "int32",
              "type": "integer"
            },
            "pageToken": {
              "location": "query",
              "description": "A token received from a previous call to this method, in order to retrieve further results.",
              "type": "string"
            }
          },
          "parameterOrder": [
            "parent"
          ],
          "flatPath": "androidpublisher/v3/developers/{developersId}/users",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "id": "androidpublisher.users.list",
          "response": {
            "$ref": "ListUsersResponse"
          },
          "description": "Lists all users with access to a developer account.",
          "httpMethod": "GET",
          "path": "androidpublisher/v3/{+parent}/users"
        }
      }
    },
    "systemapks": {
      "resources": {
        "variants": {
          "methods": {
            "download": {
              "httpMethod": "GET",
              "description": "Downloads a previously created system APK which is suitable for inclusion in a system image.",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "useMediaDownloadService": true,
              "path": "androidpublisher/v3/applications/{packageName}/systemApks/{versionCode}/variants/{variantId}:download",
              "id": "androidpublisher.systemapks.variants.download",
              "flatPath": "androidpublisher/v3/applications/{packageName}/systemApks/{versionCode}/variants/{variantId}:download",
              "parameterOrder": [
                "packageName",
                "versionCode",
                "variantId"
              ],
              "parameters": {
                "packageName": {
                  "description": "Package name of the app.",
                  "location": "path",
                  "required": true,
                  "type": "string"
                },
                "versionCode": {
                  "description": "The version code of the App Bundle.",
                  "format": "int64",
                  "type": "string",
                  "location": "path",
                  "required": true
                },
                "variantId": {
                  "location": "path",
                  "format": "uint32",
                  "type": "integer",
                  "description": "The ID of a previously created system APK variant.",
                  "required": true
                }
              },
              "supportsMediaDownload": true
            },
            "get": {
              "description": "Returns a previously created system APK variant.",
              "flatPath": "androidpublisher/v3/applications/{packageName}/systemApks/{versionCode}/variants/{variantId}",
              "parameterOrder": [
                "packageName",
                "versionCode",
                "variantId"
              ],
              "httpMethod": "GET",
              "id": "androidpublisher.systemapks.variants.get",
              "response": {
                "$ref": "Variant"
              },
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "parameters": {
                "packageName": {
                  "required": true,
                  "type": "string",
                  "description": "Package name of the app.",
                  "location": "path"
                },
                "versionCode": {
                  "description": "The version code of the App Bundle.",
                  "type": "string",
                  "location": "path",
                  "format": "int64",
                  "required": true
                },
                "variantId": {
                  "required": true,
                  "type": "integer",
                  "format": "uint32",
                  "description": "The ID of a previously created system APK variant.",
                  "location": "path"
                }
              },
              "path": "androidpublisher/v3/applications/{packageName}/systemApks/{versionCode}/variants/{variantId}"
            },
            "list": {
              "flatPath": "androidpublisher/v3/applications/{packageName}/systemApks/{versionCode}/variants",
              "path": "androidpublisher/v3/applications/{packageName}/systemApks/{versionCode}/variants",
              "id": "androidpublisher.systemapks.variants.list",
              "httpMethod": "GET",
              "parameterOrder": [
                "packageName",
                "versionCode"
              ],
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "parameters": {
                "packageName": {
                  "required": true,
                  "type": "string",
                  "description": "Package name of the app.",
                  "location": "path"
                },
                "versionCode": {
                  "type": "string",
                  "description": "The version code of the App Bundle.",
                  "location": "path",
                  "format": "int64",
                  "required": true
                }
              },
              "description": "Returns the list of previously created system APK variants.",
              "response": {
                "$ref": "SystemApksListResponse"
              }
            },
            "create": {
              "parameterOrder": [
                "packageName",
                "versionCode"
              ],
              "flatPath": "androidpublisher/v3/applications/{packageName}/systemApks/{versionCode}/variants",
              "path": "androidpublisher/v3/applications/{packageName}/systemApks/{versionCode}/variants",
              "parameters": {
                "packageName": {
                  "required": true,
                  "description": "Package name of the app.",
                  "type": "string",
                  "location": "path"
                },
                "versionCode": {
                  "type": "string",
                  "format": "int64",
                  "location": "path",
                  "required": true,
                  "description": "The version code of the App Bundle."
                }
              },
              "request": {
                "$ref": "Variant"
              },
              "httpMethod": "POST",
              "description": "Creates an APK which is suitable for inclusion in a system image from an already uploaded Android App Bundle.",
              "id": "androidpublisher.systemapks.variants.create",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "response": {
                "$ref": "Variant"
              }
            }
          }
        }
      }
    },
    "orders": {
      "methods": {
        "refund": {
          "parameterOrder": [
            "packageName",
            "orderId"
          ],
          "id": "androidpublisher.orders.refund",
          "httpMethod": "POST",
          "path": "androidpublisher/v3/applications/{packageName}/orders/{orderId}:refund",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "description": "Refunds a user's subscription or in-app purchase order. Orders older than 3 years cannot be refunded.",
          "flatPath": "androidpublisher/v3/applications/{packageName}/orders/{orderId}:refund",
          "parameters": {
            "packageName": {
              "required": true,
              "type": "string",
              "description": "The package name of the application for which this subscription or in-app item was purchased (for example, 'com.some.thing').",
              "location": "path"
            },
            "revoke": {
              "type": "boolean",
              "location": "query",
              "description": "Whether to revoke the purchased item. If set to true, access to the subscription or in-app item will be terminated immediately. If the item is a recurring subscription, all future payments will also be terminated. Consumed in-app items need to be handled by developer's app. (optional)."
            },
            "orderId": {
              "required": true,
              "type": "string",
              "description": "The order ID provided to the user when the subscription or in-app order was purchased.",
              "location": "path"
            }
          }
        },
        "get": {
          "description": "Get order details for a single order.",
          "parameters": {
            "orderId": {
              "description": "Required. The order ID provided to the user when the subscription or in-app order was purchased.",
              "required": true,
              "type": "string",
              "location": "path"
            },
            "packageName": {
              "description": "Required. The package name of the application for which this subscription or in-app item was purchased (for example, 'com.some.thing').",
              "required": true,
              "type": "string",
              "location": "path"
            }
          },
          "path": "androidpublisher/v3/applications/{packageName}/orders/{orderId}",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "flatPath": "androidpublisher/v3/applications/{packageName}/orders/{orderId}",
          "parameterOrder": [
            "packageName",
            "orderId"
          ],
          "response": {
            "$ref": "Order"
          },
          "id": "androidpublisher.orders.get",
          "httpMethod": "GET"
        },
        "reviewrefund": {
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "id": "androidpublisher.orders.reviewrefund",
          "flatPath": "androidpublisher/v3/applications/{packageName}/orders/{orderId}:reviewrefund",
          "parameters": {
            "packageName": {
              "required": true,
              "type": "string",
              "description": "Required. The package name of the application for which this subscription or in-app item was purchased (for example, 'com.some.thing').",
              "location": "path"
            },
            "orderId": {
              "type": "string",
              "required": true,
              "location": "path",
              "description": "Required. The order ID provided to the user when the subscription or in-app order was purchased."
            }
          },
          "description": "Provide refund preference and purchase usage for a chargeback request",
          "parameterOrder": [
            "packageName",
            "orderId"
          ],
          "path": "androidpublisher/v3/applications/{packageName}/orders/{orderId}:reviewrefund",
          "httpMethod": "POST",
          "request": {
            "$ref": "OrdersReviewRefundRequest"
          }
        },
        "batchget": {
          "parameterOrder": [
            "packageName"
          ],
          "response": {
            "$ref": "BatchGetOrdersResponse"
          },
          "path": "androidpublisher/v3/applications/{packageName}/orders:batchGet",
          "id": "androidpublisher.orders.batchget",
          "parameters": {
            "orderIds": {
              "type": "string",
              "description": "Required. The list of order IDs to retrieve order details for. There must be between 1 and 1000 (inclusive) order IDs per request. If any order ID is not found or does not match the provided package, the entire request will fail with an error. The order IDs must be distinct.",
              "location": "query",
              "repeated": true
            },
            "packageName": {
              "location": "path",
              "type": "string",
              "description": "Required. The package name of the application for which this subscription or in-app item was purchased (for example, 'com.some.thing').",
              "required": true
            }
          },
          "description": "Get order details for a list of orders.",
          "httpMethod": "GET",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "flatPath": "androidpublisher/v3/applications/{packageName}/orders:batchGet"
        }
      }
    },
    "edits": {
      "resources": {
        "listings": {
          "methods": {
            "patch": {
              "description": "Patches a localized store listing.",
              "parameters": {
                "editId": {
                  "description": "Identifier of the edit.",
                  "location": "path",
                  "type": "string",
                  "required": true
                },
                "language": {
                  "type": "string",
                  "required": true,
                  "description": "Language localization code (a BCP-47 language tag; for example, \"de-AT\" for Austrian German).",
                  "location": "path"
                },
                "packageName": {
                  "description": "Package name of the app.",
                  "required": true,
                  "type": "string",
                  "location": "path"
                }
              },
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "parameterOrder": [
                "packageName",
                "editId",
                "language"
              ],
              "httpMethod": "PATCH",
              "response": {
                "$ref": "Listing"
              },
              "request": {
                "$ref": "Listing"
              },
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}",
              "id": "androidpublisher.edits.listings.patch"
            },
            "update": {
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "response": {
                "$ref": "Listing"
              },
              "description": "Creates or updates a localized store listing.",
              "httpMethod": "PUT",
              "request": {
                "$ref": "Listing"
              },
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}",
              "parameterOrder": [
                "packageName",
                "editId",
                "language"
              ],
              "parameters": {
                "language": {
                  "location": "path",
                  "type": "string",
                  "required": true,
                  "description": "Language localization code (a BCP-47 language tag; for example, \"de-AT\" for Austrian German)."
                },
                "packageName": {
                  "description": "Package name of the app.",
                  "required": true,
                  "type": "string",
                  "location": "path"
                },
                "editId": {
                  "type": "string",
                  "location": "path",
                  "description": "Identifier of the edit.",
                  "required": true
                }
              },
              "id": "androidpublisher.edits.listings.update",
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}"
            },
            "get": {
              "httpMethod": "GET",
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "parameterOrder": [
                "packageName",
                "editId",
                "language"
              ],
              "description": "Gets a localized store listing.",
              "id": "androidpublisher.edits.listings.get",
              "response": {
                "$ref": "Listing"
              },
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}",
              "parameters": {
                "editId": {
                  "required": true,
                  "description": "Identifier of the edit.",
                  "location": "path",
                  "type": "string"
                },
                "language": {
                  "location": "path",
                  "description": "Language localization code (a BCP-47 language tag; for example, \"de-AT\" for Austrian German).",
                  "required": true,
                  "type": "string"
                },
                "packageName": {
                  "location": "path",
                  "description": "Package name of the app.",
                  "type": "string",
                  "required": true
                }
              }
            },
            "delete": {
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}",
              "parameterOrder": [
                "packageName",
                "editId",
                "language"
              ],
              "id": "androidpublisher.edits.listings.delete",
              "httpMethod": "DELETE",
              "description": "Deletes a localized store listing.",
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "parameters": {
                "packageName": {
                  "description": "Package name of the app.",
                  "required": true,
                  "type": "string",
                  "location": "path"
                },
                "editId": {
                  "description": "Identifier of the edit.",
                  "location": "path",
                  "required": true,
                  "type": "string"
                },
                "language": {
                  "required": true,
                  "description": "Language localization code (a BCP-47 language tag; for example, \"de-AT\" for Austrian German).",
                  "location": "path",
                  "type": "string"
                }
              }
            },
            "list": {
              "description": "Lists all localized store listings.",
              "id": "androidpublisher.edits.listings.list",
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings",
              "httpMethod": "GET",
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings",
              "parameters": {
                "editId": {
                  "required": true,
                  "description": "Identifier of the edit.",
                  "type": "string",
                  "location": "path"
                },
                "packageName": {
                  "required": true,
                  "type": "string",
                  "description": "Package name of the app.",
                  "location": "path"
                }
              },
              "response": {
                "$ref": "ListingsListResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "parameterOrder": [
                "packageName",
                "editId"
              ]
            },
            "deleteall": {
              "id": "androidpublisher.edits.listings.deleteall",
              "httpMethod": "DELETE",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "parameterOrder": [
                "packageName",
                "editId"
              ],
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings",
              "parameters": {
                "editId": {
                  "required": true,
                  "type": "string",
                  "description": "Identifier of the edit.",
                  "location": "path"
                },
                "packageName": {
                  "type": "string",
                  "description": "Package name of the app.",
                  "location": "path",
                  "required": true
                }
              },
              "description": "Deletes all store listings.",
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings"
            }
          }
        },
        "details": {
          "methods": {
            "get": {
              "response": {
                "$ref": "AppDetails"
              },
              "parameters": {
                "editId": {
                  "description": "Identifier of the edit.",
                  "required": true,
                  "location": "path",
                  "type": "string"
                },
                "packageName": {
                  "description": "Package name of the app.",
                  "required": true,
                  "type": "string",
                  "location": "path"
                }
              },
              "description": "Gets details of an app.",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/details",
              "parameterOrder": [
                "packageName",
                "editId"
              ],
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/details",
              "id": "androidpublisher.edits.details.get",
              "httpMethod": "GET"
            },
            "update": {
              "response": {
                "$ref": "AppDetails"
              },
              "httpMethod": "PUT",
              "request": {
                "$ref": "AppDetails"
              },
              "id": "androidpublisher.edits.details.update",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "parameterOrder": [
                "packageName",
                "editId"
              ],
              "description": "Updates details of an app.",
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/details",
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/details",
              "parameters": {
                "packageName": {
                  "required": true,
                  "location": "path",
                  "description": "Package name of the app.",
                  "type": "string"
                },
                "editId": {
                  "type": "string",
                  "required": true,
                  "location": "path",
                  "description": "Identifier of the edit."
                }
              }
            },
            "patch": {
              "id": "androidpublisher.edits.details.patch",
              "httpMethod": "PATCH",
              "parameterOrder": [
                "packageName",
                "editId"
              ],
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "response": {
                "$ref": "AppDetails"
              },
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/details",
              "request": {
                "$ref": "AppDetails"
              },
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/details",
              "parameters": {
                "editId": {
                  "required": true,
                  "description": "Identifier of the edit.",
                  "location": "path",
                  "type": "string"
                },
                "packageName": {
                  "type": "string",
                  "required": true,
                  "description": "Package name of the app.",
                  "location": "path"
                }
              },
              "description": "Patches details of an app."
            }
          }
        },
        "testers": {
          "methods": {
            "patch": {
              "parameterOrder": [
                "packageName",
                "editId",
                "track"
              ],
              "parameters": {
                "track": {
                  "required": true,
                  "description": "The track to update.",
                  "location": "path",
                  "type": "string"
                },
                "editId": {
                  "type": "string",
                  "location": "path",
                  "required": true,
                  "description": "Identifier of the edit."
                },
                "packageName": {
                  "type": "string",
                  "required": true,
                  "description": "Package name of the app.",
                  "location": "path"
                }
              },
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/testers/{track}",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "id": "androidpublisher.edits.testers.patch",
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/testers/{track}",
              "response": {
                "$ref": "Testers"
              },
              "description": "Patches testers. Note: Testers resource does not support email lists.",
              "request": {
                "$ref": "Testers"
              },
              "httpMethod": "PATCH"
            },
            "update": {
              "response": {
                "$ref": "Testers"
              },
              "parameters": {
                "track": {
                  "required": true,
                  "description": "The track to update.",
                  "location": "path",
                  "type": "string"
                },
                "editId": {
                  "location": "path",
                  "description": "Identifier of the edit.",
                  "required": true,
                  "type": "string"
                },
                "packageName": {
                  "location": "path",
                  "type": "string",
                  "description": "Package name of the app.",
                  "required": true
                }
              },
              "parameterOrder": [
                "packageName",
                "editId",
                "track"
              ],
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "id": "androidpublisher.edits.testers.update",
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/testers/{track}",
              "description": "Updates testers. Note: Testers resource does not support email lists.",
              "request": {
                "$ref": "Testers"
              },
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/testers/{track}",
              "httpMethod": "PUT"
            },
            "get": {
              "response": {
                "$ref": "Testers"
              },
              "id": "androidpublisher.edits.testers.get",
              "httpMethod": "GET",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "parameterOrder": [
                "packageName",
                "editId",
                "track"
              ],
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/testers/{track}",
              "description": "Gets testers. Note: Testers resource does not support email lists.",
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/testers/{track}",
              "parameters": {
                "track": {
                  "required": true,
                  "description": "The track to read from.",
                  "location": "path",
                  "type": "string"
                },
                "editId": {
                  "type": "string",
                  "required": true,
                  "description": "Identifier of the edit.",
                  "location": "path"
                },
                "packageName": {
                  "location": "path",
                  "description": "Package name of the app.",
                  "required": true,
                  "type": "string"
                }
              }
            }
          }
        },
        "apks": {
          "methods": {
            "addexternallyhosted": {
              "request": {
                "$ref": "ApksAddExternallyHostedRequest"
              },
              "parameters": {
                "packageName": {
                  "type": "string",
                  "required": true,
                  "location": "path",
                  "description": "Package name of the app."
                },
                "editId": {
                  "type": "string",
                  "location": "path",
                  "required": true,
                  "description": "Identifier of the edit."
                }
              },
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/externallyHosted",
              "parameterOrder": [
                "packageName",
                "editId"
              ],
              "description": "Creates a new APK without uploading the APK itself to Google Play, instead hosting the APK at a specified URL. This function is only available to organizations using Managed Play whose application is configured to restrict distribution to the organizations.",
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/externallyHosted",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "id": "androidpublisher.edits.apks.addexternallyhosted",
              "httpMethod": "POST",
              "response": {
                "$ref": "ApksAddExternallyHostedResponse"
              }
            },
            "list": {
              "parameters": {
                "packageName": {
                  "description": "Package name of the app.",
                  "location": "path",
                  "type": "string",
                  "required": true
                },
                "editId": {
                  "description": "Identifier of the edit.",
                  "type": "string",
                  "required": true,
                  "location": "path"
                }
              },
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/apks",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "response": {
                "$ref": "ApksListResponse"
              },
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/apks",
              "httpMethod": "GET",
              "description": "Lists all current APKs of the app and edit.",
              "parameterOrder": [
                "packageName",
                "editId"
              ],
              "id": "androidpublisher.edits.apks.list"
            },
            "upload": {
              "parameterOrder": [
                "packageName",
                "editId"
              ],
              "supportsMediaUpload": true,
              "id": "androidpublisher.edits.apks.upload",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/apks",
              "description": "Uploads an APK and adds to the current edit.",
              "httpMethod": "POST",
              "mediaUpload": {
                "protocols": {
                  "simple": {
                    "multipart": true,
                    "path": "/upload/androidpublisher/v3/applications/{packageName}/edits/{editId}/apks"
                  },
                  "resumable": {
                    "path": "/resumable/upload/androidpublisher/v3/applications/{packageName}/edits/{editId}/apks",
                    "multipart": true
                  }
                },
                "maxSize": "10737418240",
                "accept": [
                  "application/octet-stream",
                  "application/vnd.android.package-archive"
                ]
              },
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/apks",
              "response": {
                "$ref": "Apk"
              },
              "parameters": {
                "packageName": {
                  "required": true,
                  "description": "Package name of the app.",
                  "type": "string",
                  "location": "path"
                },
                "editId": {
                  "required": true,
                  "type": "string",
                  "description": "Identifier of the edit.",
                  "location": "path"
                }
              }
            }
          }
        },
        "expansionfiles": {
          "methods": {
            "update": {
              "response": {
                "$ref": "ExpansionFile"
              },
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}",
              "request": {
                "$ref": "ExpansionFile"
              },
              "parameters": {
                "apkVersionCode": {
                  "location": "path",
                  "type": "integer",
                  "format": "int32",
                  "description": "The version code of the APK whose expansion file configuration is being read or modified.",
                  "required": true
                },
                "expansionFileType": {
                  "enum": [
                    "expansionFileTypeUnspecified",
                    "main",
                    "patch"
                  ],
                  "enumDescriptions": [
                    "Unspecified expansion file type.",
                    "Main expansion file.",
                    "Patch expansion file."
                  ],
                  "required": true,
                  "type": "string",
                  "description": "The file type of the file configuration which is being read or modified.",
                  "location": "path"
                },
                "packageName": {
                  "type": "string",
                  "location": "path",
                  "required": true,
                  "description": "Package name of the app."
                },
                "editId": {
                  "type": "string",
                  "required": true,
                  "location": "path",
                  "description": "Identifier of the edit."
                }
              },
              "httpMethod": "PUT",
              "id": "androidpublisher.edits.expansionfiles.update",
              "parameterOrder": [
                "packageName",
                "editId",
                "apkVersionCode",
                "expansionFileType"
              ],
              "description": "Updates the APK's expansion file configuration to reference another APK's expansion file. To add a new expansion file use the Upload method.",
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}"
            },
            "get": {
              "description": "Fetches the expansion file configuration for the specified APK.",
              "httpMethod": "GET",
              "response": {
                "$ref": "ExpansionFile"
              },
              "parameters": {
                "expansionFileType": {
                  "required": true,
                  "enum": [
                    "expansionFileTypeUnspecified",
                    "main",
                    "patch"
                  ],
                  "description": "The file type of the file configuration which is being read or modified.",
                  "enumDescriptions": [
                    "Unspecified expansion file type.",
                    "Main expansion file.",
                    "Patch expansion file."
                  ],
                  "type": "string",
                  "location": "path"
                },
                "editId": {
                  "description": "Identifier of the edit.",
                  "location": "path",
                  "type": "string",
                  "required": true
                },
                "apkVersionCode": {
                  "type": "integer",
                  "description": "The version code of the APK whose expansion file configuration is being read or modified.",
                  "required": true,
                  "location": "path",
                  "format": "int32"
                },
                "packageName": {
                  "description": "Package name of the app.",
                  "location": "path",
                  "type": "string",
                  "required": true
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}",
              "id": "androidpublisher.edits.expansionfiles.get",
              "parameterOrder": [
                "packageName",
                "editId",
                "apkVersionCode",
                "expansionFileType"
              ],
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}"
            },
            "upload": {
              "mediaUpload": {
                "protocols": {
                  "simple": {
                    "path": "/upload/androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}",
                    "multipart": true
                  },
                  "resumable": {
                    "path": "/resumable/upload/androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}",
                    "multipart": true
                  }
                },
                "accept": [
                  "application/octet-stream"
                ],
                "maxSize": "2147483648"
              },
              "description": "Uploads a new expansion file and attaches to the specified APK.",
              "parameters": {
                "editId": {
                  "required": true,
                  "description": "Identifier of the edit.",
                  "type": "string",
                  "location": "path"
                },
                "apkVersionCode": {
                  "location": "path",
                  "type": "integer",
                  "required": true,
                  "format": "int32",
                  "description": "The version code of the APK whose expansion file configuration is being read or modified."
                },
                "expansionFileType": {
                  "description": "The file type of the expansion file configuration which is being updated.",
                  "type": "string",
                  "location": "path",
                  "enumDescriptions": [
                    "Unspecified expansion file type.",
                    "Main expansion file.",
                    "Patch expansion file."
                  ],
                  "enum": [
                    "expansionFileTypeUnspecified",
                    "main",
                    "patch"
                  ],
                  "required": true
                },
                "packageName": {
                  "location": "path",
                  "type": "string",
                  "required": true,
                  "description": "Package name of the app."
                }
              },
              "response": {
                "$ref": "ExpansionFilesUploadResponse"
              },
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}",
              "id": "androidpublisher.edits.expansionfiles.upload",
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}",
              "parameterOrder": [
                "packageName",
                "editId",
                "apkVersionCode",
                "expansionFileType"
              ],
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "httpMethod": "POST",
              "supportsMediaUpload": true
            },
            "patch": {
              "response": {
                "$ref": "ExpansionFile"
              },
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}",
              "httpMethod": "PATCH",
              "description": "Patches the APK's expansion file configuration to reference another APK's expansion file. To add a new expansion file use the Upload method.",
              "id": "androidpublisher.edits.expansionfiles.patch",
              "request": {
                "$ref": "ExpansionFile"
              },
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/expansionFiles/{expansionFileType}",
              "parameterOrder": [
                "packageName",
                "editId",
                "apkVersionCode",
                "expansionFileType"
              ],
              "parameters": {
                "apkVersionCode": {
                  "location": "path",
                  "type": "integer",
                  "format": "int32",
                  "required": true,
                  "description": "The version code of the APK whose expansion file configuration is being read or modified."
                },
                "editId": {
                  "description": "Identifier of the edit.",
                  "type": "string",
                  "required": true,
                  "location": "path"
                },
                "expansionFileType": {
                  "enumDescriptions": [
                    "Unspecified expansion file type.",
                    "Main expansion file.",
                    "Patch expansion file."
                  ],
                  "required": true,
                  "description": "The file type of the expansion file configuration which is being updated.",
                  "enum": [
                    "expansionFileTypeUnspecified",
                    "main",
                    "patch"
                  ],
                  "location": "path",
                  "type": "string"
                },
                "packageName": {
                  "location": "path",
                  "description": "Package name of the app.",
                  "type": "string",
                  "required": true
                }
              }
            }
          }
        },
        "images": {
          "methods": {
            "list": {
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}",
              "response": {
                "$ref": "ImagesListResponse"
              },
              "parameters": {
                "language": {
                  "description": "Language localization code (a BCP-47 language tag; for example, \"de-AT\" for Austrian German). There must be a store listing for the specified language.",
                  "type": "string",
                  "required": true,
                  "location": "path"
                },
                "packageName": {
                  "description": "Package name of the app.",
                  "required": true,
                  "type": "string",
                  "location": "path"
                },
                "imageType": {
                  "enum": [
                    "appImageTypeUnspecified",
                    "phoneScreenshots",
                    "sevenInchScreenshots",
                    "tenInchScreenshots",
                    "tvScreenshots",
                    "wearScreenshots",
                    "icon",
                    "featureGraphic",
                    "tvBanner"
                  ],
                  "description": "Type of the Image. Providing an image type that refers to no images will return an empty response.",
                  "location": "path",
                  "enumDescriptions": [
                    "Unspecified type. Do not use.",
                    "Phone screenshot.",
                    "Seven inch screenshot.",
                    "Ten inch screenshot.",
                    "TV screenshot.",
                    "Wear screenshot.",
                    "Icon.",
                    "Feature graphic.",
                    "TV banner."
                  ],
                  "required": true,
                  "type": "string"
                },
                "editId": {
                  "description": "Identifier of the edit.",
                  "type": "string",
                  "location": "path",
                  "required": true
                }
              },
              "id": "androidpublisher.edits.images.list",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "httpMethod": "GET",
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}",
              "parameterOrder": [
                "packageName",
                "editId",
                "language",
                "imageType"
              ],
              "description": "Lists all images. The response may be empty."
            },
            "deleteall": {
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "parameterOrder": [
                "packageName",
                "editId",
                "language",
                "imageType"
              ],
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}",
              "description": "Deletes all images for the specified language and image type. Returns an empty response if no images are found.",
              "id": "androidpublisher.edits.images.deleteall",
              "response": {
                "$ref": "ImagesDeleteAllResponse"
              },
              "httpMethod": "DELETE",
              "parameters": {
                "packageName": {
                  "required": true,
                  "location": "path",
                  "type": "string",
                  "description": "Package name of the app."
                },
                "language": {
                  "location": "path",
                  "type": "string",
                  "description": "Language localization code (a BCP-47 language tag; for example, \"de-AT\" for Austrian German). Providing a language that is not supported by the App is a no-op.",
                  "required": true
                },
                "editId": {
                  "description": "Identifier of the edit.",
                  "location": "path",
                  "required": true,
                  "type": "string"
                },
                "imageType": {
                  "type": "string",
                  "location": "path",
                  "required": true,
                  "description": "Type of the Image. Providing an image type that refers to no images is a no-op.",
                  "enumDescriptions": [
                    "Unspecified type. Do not use.",
                    "Phone screenshot.",
                    "Seven inch screenshot.",
                    "Ten inch screenshot.",
                    "TV screenshot.",
                    "Wear screenshot.",
                    "Icon.",
                    "Feature graphic.",
                    "TV banner."
                  ],
                  "enum": [
                    "appImageTypeUnspecified",
                    "phoneScreenshots",
                    "sevenInchScreenshots",
                    "tenInchScreenshots",
                    "tvScreenshots",
                    "wearScreenshots",
                    "icon",
                    "featureGraphic",
                    "tvBanner"
                  ]
                }
              },
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}"
            },
            "delete": {
              "httpMethod": "DELETE",
              "description": "Deletes the image (specified by id) from the edit.",
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}/{imageId}",
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}/{imageId}",
              "parameterOrder": [
                "packageName",
                "editId",
                "language",
                "imageType",
                "imageId"
              ],
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "id": "androidpublisher.edits.images.delete",
              "parameters": {
                "imageType": {
                  "type": "string",
                  "description": "Type of the Image.",
                  "location": "path",
                  "required": true,
                  "enumDescriptions": [
                    "Unspecified type. Do not use.",
                    "Phone screenshot.",
                    "Seven inch screenshot.",
                    "Ten inch screenshot.",
                    "TV screenshot.",
                    "Wear screenshot.",
                    "Icon.",
                    "Feature graphic.",
                    "TV banner."
                  ],
                  "enum": [
                    "appImageTypeUnspecified",
                    "phoneScreenshots",
                    "sevenInchScreenshots",
                    "tenInchScreenshots",
                    "tvScreenshots",
                    "wearScreenshots",
                    "icon",
                    "featureGraphic",
                    "tvBanner"
                  ]
                },
                "packageName": {
                  "location": "path",
                  "description": "Package name of the app.",
                  "required": true,
                  "type": "string"
                },
                "language": {
                  "description": "Language localization code (a BCP-47 language tag; for example, \"de-AT\" for Austrian German).",
                  "required": true,
                  "type": "string",
                  "location": "path"
                },
                "imageId": {
                  "required": true,
                  "description": "Unique identifier an image within the set of images attached to this edit.",
                  "type": "string",
                  "location": "path"
                },
                "editId": {
                  "type": "string",
                  "location": "path",
                  "description": "Identifier of the edit.",
                  "required": true
                }
              }
            },
            "upload": {
              "id": "androidpublisher.edits.images.upload",
              "parameterOrder": [
                "packageName",
                "editId",
                "language",
                "imageType"
              ],
              "response": {
                "$ref": "ImagesUploadResponse"
              },
              "parameters": {
                "imageType": {
                  "enumDescriptions": [
                    "Unspecified type. Do not use.",
                    "Phone screenshot.",
                    "Seven inch screenshot.",
                    "Ten inch screenshot.",
                    "TV screenshot.",
                    "Wear screenshot.",
                    "Icon.",
                    "Feature graphic.",
                    "TV banner."
                  ],
                  "required": true,
                  "enum": [
                    "appImageTypeUnspecified",
                    "phoneScreenshots",
                    "sevenInchScreenshots",
                    "tenInchScreenshots",
                    "tvScreenshots",
                    "wearScreenshots",
                    "icon",
                    "featureGraphic",
                    "tvBanner"
                  ],
                  "description": "Type of the Image.",
                  "location": "path",
                  "type": "string"
                },
                "editId": {
                  "required": true,
                  "type": "string",
                  "description": "Identifier of the edit.",
                  "location": "path"
                },
                "language": {
                  "description": "Language localization code (a BCP-47 language tag; for example, \"de-AT\" for Austrian German). Providing a language that is not supported by the App is a no-op.",
                  "location": "path",
                  "type": "string",
                  "required": true
                },
                "aiGeneratedState": {
                  "type": "string",
                  "enum": [
                    "aiGeneratedStateUnspecified",
                    "aiGeneratedStateNotAiGenerated",
                    "aiGeneratedStateAiGeneratedDeveloperAttested"
                  ],
                  "location": "query",
                  "description": "Optional. Whether the image was generated by AI. Attested by the developer.",
                  "enumDescriptions": [
                    "Catch-all for unrecognized enum values. See go/protodosdonts.",
                    "The content is not generated by AI.",
                    "The content is generated by AI and attested by the developer."
                  ]
                },
                "packageName": {
                  "location": "path",
                  "description": "Package name of the app.",
                  "type": "string",
                  "required": true
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "httpMethod": "POST",
              "supportsMediaUpload": true,
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}",
              "description": "Uploads an image of the specified language and image type, and adds to the edit.",
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}",
              "mediaUpload": {
                "accept": [
                  "image/*"
                ],
                "maxSize": "15728640",
                "protocols": {
                  "simple": {
                    "path": "/upload/androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}",
                    "multipart": true
                  },
                  "resumable": {
                    "multipart": true,
                    "path": "/resumable/upload/androidpublisher/v3/applications/{packageName}/edits/{editId}/listings/{language}/{imageType}"
                  }
                }
              }
            }
          }
        },
        "tracks": {
          "methods": {
            "patch": {
              "description": "Patches a track.",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "parameters": {
                "packageName": {
                  "type": "string",
                  "required": true,
                  "location": "path",
                  "description": "Package name of the app."
                },
                "editId": {
                  "required": true,
                  "type": "string",
                  "location": "path",
                  "description": "Identifier of the edit."
                },
                "track": {
                  "location": "path",
                  "type": "string",
                  "required": true,
                  "description": "Identifier of the track. [More on track name](https://developers.google.com/android-publisher/tracks#ff-track-name)"
                }
              },
              "id": "androidpublisher.edits.tracks.patch",
              "response": {
                "$ref": "Track"
              },
              "parameterOrder": [
                "packageName",
                "editId",
                "track"
              ],
              "httpMethod": "PATCH",
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/tracks/{track}",
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/tracks/{track}",
              "request": {
                "$ref": "Track"
              }
            },
            "create": {
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "httpMethod": "POST",
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/tracks",
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/tracks",
              "parameterOrder": [
                "packageName",
                "editId"
              ],
              "id": "androidpublisher.edits.tracks.create",
              "response": {
                "$ref": "Track"
              },
              "description": "Creates a new track.",
              "request": {
                "$ref": "TrackConfig"
              },
              "parameters": {
                "packageName": {
                  "required": true,
                  "description": "Required. Package name of the app.",
                  "type": "string",
                  "location": "path"
                },
                "editId": {
                  "type": "string",
                  "required": true,
                  "description": "Required. Identifier of the edit.",
                  "location": "path"
                }
              }
            },
            "update": {
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "parameterOrder": [
                "packageName",
                "editId",
                "track"
              ],
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/tracks/{track}",
              "description": "Updates a track.",
              "parameters": {
                "editId": {
                  "location": "path",
                  "description": "Identifier of the edit.",
                  "required": true,
                  "type": "string"
                },
                "track": {
                  "location": "path",
                  "required": true,
                  "type": "string",
                  "description": "Identifier of the track. [More on track name](https://developers.google.com/android-publisher/tracks#ff-track-name)"
                },
                "packageName": {
                  "location": "path",
                  "required": true,
                  "type": "string",
                  "description": "Package name of the app."
                }
              },
              "request": {
                "$ref": "Track"
              },
              "response": {
                "$ref": "Track"
              },
              "httpMethod": "PUT",
              "id": "androidpublisher.edits.tracks.update",
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/tracks/{track}"
            },
            "get": {
              "httpMethod": "GET",
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/tracks/{track}",
              "parameterOrder": [
                "packageName",
                "editId",
                "track"
              ],
              "description": "Gets a track.",
              "id": "androidpublisher.edits.tracks.get",
              "response": {
                "$ref": "Track"
              },
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/tracks/{track}",
              "parameters": {
                "track": {
                  "description": "Identifier of the track. [More on track name](https://developers.google.com/android-publisher/tracks#ff-track-name)",
                  "location": "path",
                  "required": true,
                  "type": "string"
                },
                "editId": {
                  "location": "path",
                  "type": "string",
                  "required": true,
                  "description": "Identifier of the edit."
                },
                "packageName": {
                  "description": "Package name of the app.",
                  "location": "path",
                  "type": "string",
                  "required": true
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ]
            },
            "list": {
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/tracks",
              "parameters": {
                "editId": {
                  "location": "path",
                  "required": true,
                  "type": "string",
                  "description": "Identifier of the edit."
                },
                "packageName": {
                  "location": "path",
                  "type": "string",
                  "required": true,
                  "description": "Package name of the app."
                }
              },
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/tracks",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "httpMethod": "GET",
              "description": "Lists all tracks.",
              "parameterOrder": [
                "packageName",
                "editId"
              ],
              "response": {
                "$ref": "TracksListResponse"
              },
              "id": "androidpublisher.edits.tracks.list"
            }
          }
        },
        "deobfuscationfiles": {
          "methods": {
            "upload": {
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/deobfuscationFiles/{deobfuscationFileType}",
              "id": "androidpublisher.edits.deobfuscationfiles.upload",
              "httpMethod": "POST",
              "description": "Uploads a new deobfuscation file and attaches to the specified APK.",
              "mediaUpload": {
                "maxSize": "2097152000",
                "accept": [
                  "application/octet-stream"
                ],
                "protocols": {
                  "resumable": {
                    "path": "/resumable/upload/androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/deobfuscationFiles/{deobfuscationFileType}",
                    "multipart": true
                  },
                  "simple": {
                    "multipart": true,
                    "path": "/upload/androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/deobfuscationFiles/{deobfuscationFileType}"
                  }
                }
              },
              "parameterOrder": [
                "packageName",
                "editId",
                "apkVersionCode",
                "deobfuscationFileType"
              ],
              "response": {
                "$ref": "DeobfuscationFilesUploadResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "parameters": {
                "deobfuscationFileType": {
                  "enum": [
                    "deobfuscationFileTypeUnspecified",
                    "proguard",
                    "nativeCode"
                  ],
                  "required": true,
                  "type": "string",
                  "location": "path",
                  "enumDescriptions": [
                    "Unspecified deobfuscation file type.",
                    "Proguard deobfuscation file type.",
                    "Native debugging symbols file type."
                  ],
                  "description": "The type of the deobfuscation file."
                },
                "packageName": {
                  "type": "string",
                  "required": true,
                  "description": "Unique identifier for the Android app.",
                  "location": "path"
                },
                "apkVersionCode": {
                  "location": "path",
                  "type": "integer",
                  "description": "The version code of the APK whose Deobfuscation File is being uploaded.",
                  "format": "int32",
                  "required": true
                },
                "editId": {
                  "description": "Unique identifier for this edit.",
                  "required": true,
                  "location": "path",
                  "type": "string"
                }
              },
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/apks/{apkVersionCode}/deobfuscationFiles/{deobfuscationFileType}",
              "supportsMediaUpload": true
            }
          }
        },
        "bundles": {
          "methods": {
            "list": {
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "description": "Lists all current Android App Bundles of the app and edit.",
              "parameters": {
                "editId": {
                  "description": "Identifier of the edit.",
                  "required": true,
                  "type": "string",
                  "location": "path"
                },
                "packageName": {
                  "type": "string",
                  "description": "Package name of the app.",
                  "required": true,
                  "location": "path"
                }
              },
              "parameterOrder": [
                "packageName",
                "editId"
              ],
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/bundles",
              "id": "androidpublisher.edits.bundles.list",
              "response": {
                "$ref": "BundlesListResponse"
              },
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/bundles",
              "httpMethod": "GET"
            },
            "upload": {
              "httpMethod": "POST",
              "id": "androidpublisher.edits.bundles.upload",
              "response": {
                "$ref": "Bundle"
              },
              "parameterOrder": [
                "packageName",
                "editId"
              ],
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/bundles",
              "description": "Uploads a new Android App Bundle to this edit. If you are using the Google API client libraries, please increase the timeout of the http request before calling this endpoint (a timeout of 2 minutes is recommended). See [Timeouts and Errors](https://developers.google.com/api-client-library/java/google-api-java-client/errors) for an example in java.",
              "mediaUpload": {
                "accept": [
                  "application/octet-stream"
                ],
                "protocols": {
                  "simple": {
                    "path": "/upload/androidpublisher/v3/applications/{packageName}/edits/{editId}/bundles",
                    "multipart": true
                  },
                  "resumable": {
                    "multipart": true,
                    "path": "/resumable/upload/androidpublisher/v3/applications/{packageName}/edits/{editId}/bundles"
                  }
                },
                "maxSize": "53687091200"
              },
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "supportsMediaUpload": true,
              "parameters": {
                "deviceTierConfigId": {
                  "description": "Device tier config (DTC) to be used for generating deliverables (APKs). Contains id of the DTC or \"LATEST\" for last uploaded DTC.",
                  "location": "query",
                  "type": "string"
                },
                "packageName": {
                  "type": "string",
                  "description": "Package name of the app.",
                  "required": true,
                  "location": "path"
                },
                "editId": {
                  "required": true,
                  "description": "Identifier of the edit.",
                  "type": "string",
                  "location": "path"
                },
                "ackBundleInstallationWarning": {
                  "deprecated": true,
                  "type": "boolean",
                  "location": "query",
                  "description": "Deprecated. The installation warning has been removed, it's not necessary to set this field anymore."
                }
              },
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/bundles"
            }
          }
        },
        "countryavailability": {
          "methods": {
            "get": {
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "httpMethod": "GET",
              "parameterOrder": [
                "packageName",
                "editId",
                "track"
              ],
              "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}/countryAvailability/{track}",
              "id": "androidpublisher.edits.countryavailability.get",
              "description": "Gets country availability.",
              "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}/countryAvailability/{track}",
              "response": {
                "$ref": "TrackCountryAvailability"
              },
              "parameters": {
                "editId": {
                  "type": "string",
                  "location": "path",
                  "description": "Identifier of the edit.",
                  "required": true
                },
                "track": {
                  "type": "string",
                  "location": "path",
                  "description": "The track to read from.",
                  "required": true
                },
                "packageName": {
                  "location": "path",
                  "description": "Package name of the app.",
                  "required": true,
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "methods": {
        "insert": {
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "description": "Creates a new edit for an app.",
          "response": {
            "$ref": "AppEdit"
          },
          "path": "androidpublisher/v3/applications/{packageName}/edits",
          "request": {
            "$ref": "AppEdit"
          },
          "httpMethod": "POST",
          "parameters": {
            "packageName": {
              "type": "string",
              "required": true,
              "description": "Package name of the app.",
              "location": "path"
            }
          },
          "parameterOrder": [
            "packageName"
          ],
          "flatPath": "androidpublisher/v3/applications/{packageName}/edits",
          "id": "androidpublisher.edits.insert"
        },
        "get": {
          "parameterOrder": [
            "packageName",
            "editId"
          ],
          "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}",
          "description": "Gets an app edit.",
          "httpMethod": "GET",
          "id": "androidpublisher.edits.get",
          "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}",
          "parameters": {
            "packageName": {
              "description": "Package name of the app.",
              "location": "path",
              "type": "string",
              "required": true
            },
            "editId": {
              "description": "Identifier of the edit.",
              "required": true,
              "location": "path",
              "type": "string"
            }
          },
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "response": {
            "$ref": "AppEdit"
          }
        },
        "delete": {
          "httpMethod": "DELETE",
          "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}",
          "description": "Deletes an app edit.",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "parameterOrder": [
            "packageName",
            "editId"
          ],
          "id": "androidpublisher.edits.delete",
          "parameters": {
            "editId": {
              "description": "Identifier of the edit.",
              "required": true,
              "type": "string",
              "location": "path"
            },
            "packageName": {
              "location": "path",
              "type": "string",
              "required": true,
              "description": "Package name of the app."
            }
          },
          "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}"
        },
        "validate": {
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "id": "androidpublisher.edits.validate",
          "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}:validate",
          "parameterOrder": [
            "packageName",
            "editId"
          ],
          "description": "Validates an app edit.",
          "httpMethod": "POST",
          "response": {
            "$ref": "AppEdit"
          },
          "parameters": {
            "packageName": {
              "type": "string",
              "required": true,
              "description": "Package name of the app.",
              "location": "path"
            },
            "editId": {
              "location": "path",
              "description": "Identifier of the edit.",
              "required": true,
              "type": "string"
            }
          },
          "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}:validate"
        },
        "commit": {
          "response": {
            "$ref": "AppEdit"
          },
          "path": "androidpublisher/v3/applications/{packageName}/edits/{editId}:commit",
          "id": "androidpublisher.edits.commit",
          "httpMethod": "POST",
          "parameters": {
            "editId": {
              "location": "path",
              "description": "Identifier of the edit.",
              "type": "string",
              "required": true
            },
            "changesInReviewBehavior": {
              "enum": [
                "CHANGES_IN_REVIEW_BEHAVIOR_TYPE_UNSPECIFIED",
                "CANCEL_IN_REVIEW_AND_SUBMIT",
                "ERROR_IF_IN_REVIEW"
              ],
              "type": "string",
              "location": "query",
              "description": "Optional. Specify how the API should behave if there are changes currently in review. If this value is not set, it will default to \"CANCEL_IN_REVIEW_AND_SUBMIT\", which will cancel the changes in review and then send all the changes for publishing.",
              "enumDescriptions": [
                "Defaults to CANCEL_IN_REVIEW_AND_SUBMIT.",
                "If there are changes already in review, then this will cancel that review first and then send all the changes for publishing.",
                "If there are changes in review, then this will return an error. Please refer to the error message sample that is returned when this happens. Note that this won't invalidate the edit. If there aren't any changes in review, then this will continue and send the new changes for publishing."
              ]
            },
            "changesNotSentForReview": {
              "location": "query",
              "type": "boolean",
              "description": "When a rejection happens, the parameter will make sure that the changes in this edit won't be reviewed until they are explicitly sent for review from within the Google Play Console UI. These changes will be added to any other changes that are not yet sent for review."
            },
            "packageName": {
              "required": true,
              "location": "path",
              "description": "Package name of the app.",
              "type": "string"
            }
          },
          "description": "Commits an app edit.",
          "parameterOrder": [
            "packageName",
            "editId"
          ],
          "flatPath": "androidpublisher/v3/applications/{packageName}/edits/{editId}:commit",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ]
        }
      }
    },
    "externaltransactions": {
      "methods": {
        "createexternaltransaction": {
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "parameters": {
            "externalTransactionId": {
              "description": "Required. The id to use for the external transaction. Must be unique across all other transactions for the app. This value should be 1-63 characters and valid characters are /a-zA-Z0-9_-/. Do not use this field to store any Personally Identifiable Information (PII) such as emails. Attempting to store PII in this field may result in requests being blocked.",
              "location": "query",
              "type": "string"
            },
            "parent": {
              "required": true,
              "pattern": "^applications/[^/]+$",
              "type": "string",
              "description": "Required. The parent resource where this external transaction will be created. Format: applications/{package_name}",
              "location": "path"
            }
          },
          "description": "Creates a new external transaction.",
          "response": {
            "$ref": "ExternalTransaction"
          },
          "request": {
            "$ref": "ExternalTransaction"
          },
          "parameterOrder": [
            "parent"
          ],
          "flatPath": "androidpublisher/v3/applications/{applicationsId}/externalTransactions",
          "path": "androidpublisher/v3/{+parent}/externalTransactions",
          "httpMethod": "POST",
          "id": "androidpublisher.externaltransactions.createexternaltransaction"
        },
        "getexternaltransaction": {
          "flatPath": "androidpublisher/v3/applications/{applicationsId}/externalTransactions/{externalTransactionsId}",
          "path": "androidpublisher/v3/{+name}",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "description": "Gets an existing external transaction.",
          "httpMethod": "GET",
          "parameters": {
            "name": {
              "required": true,
              "type": "string",
              "description": "Required. The name of the external transaction to retrieve. Format: applications/{package_name}/externalTransactions/{external_transaction}",
              "location": "path",
              "pattern": "^applications/[^/]+/externalTransactions/[^/]+$"
            }
          },
          "parameterOrder": [
            "name"
          ],
          "response": {
            "$ref": "ExternalTransaction"
          },
          "id": "androidpublisher.externaltransactions.getexternaltransaction"
        },
        "refundexternaltransaction": {
          "path": "androidpublisher/v3/{+name}:refund",
          "description": "Refunds or partially refunds an existing external transaction.",
          "httpMethod": "POST",
          "id": "androidpublisher.externaltransactions.refundexternaltransaction",
          "response": {
            "$ref": "ExternalTransaction"
          },
          "parameters": {
            "name": {
              "location": "path",
              "pattern": "^applications/[^/]+/externalTransactions/[^/]+$",
              "required": true,
              "description": "Required. The name of the external transaction that will be refunded. Format: applications/{package_name}/externalTransactions/{external_transaction}",
              "type": "string"
            }
          },
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "request": {
            "$ref": "RefundExternalTransactionRequest"
          },
          "flatPath": "androidpublisher/v3/applications/{applicationsId}/externalTransactions/{externalTransactionsId}:refund",
          "parameterOrder": [
            "name"
          ]
        }
      }
    },
    "grants": {
      "methods": {
        "patch": {
          "id": "androidpublisher.grants.patch",
          "flatPath": "androidpublisher/v3/developers/{developersId}/users/{usersId}/grants/{grantsId}",
          "parameters": {
            "name": {
              "pattern": "^developers/[^/]+/users/[^/]+/grants/[^/]+$",
              "type": "string",
              "location": "path",
              "description": "Required. Resource name for this grant, following the pattern \"developers/{developer}/users/{email}/grants/{package_name}\". If this grant is for a draft app, the app ID will be used in this resource name instead of the package name.",
              "required": true
            },
            "updateMask": {
              "format": "google-fieldmask",
              "type": "string",
              "location": "query",
              "description": "Optional. The list of fields to be updated."
            }
          },
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "parameterOrder": [
            "name"
          ],
          "path": "androidpublisher/v3/{+name}",
          "httpMethod": "PATCH",
          "response": {
            "$ref": "Grant"
          },
          "description": "Updates access for the user to the given package.",
          "request": {
            "$ref": "Grant"
          }
        },
        "create": {
          "path": "androidpublisher/v3/{+parent}/grants",
          "request": {
            "$ref": "Grant"
          },
          "flatPath": "androidpublisher/v3/developers/{developersId}/users/{usersId}/grants",
          "parameters": {
            "parent": {
              "location": "path",
              "description": "Required. The user which needs permission. Format: developers/{developer}/users/{user}",
              "pattern": "^developers/[^/]+/users/[^/]+$",
              "type": "string",
              "required": true
            }
          },
          "id": "androidpublisher.grants.create",
          "description": "Grant access for a user to the given package.",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "httpMethod": "POST",
          "parameterOrder": [
            "parent"
          ],
          "response": {
            "$ref": "Grant"
          }
        },
        "delete": {
          "parameterOrder": [
            "name"
          ],
          "httpMethod": "DELETE",
          "id": "androidpublisher.grants.delete",
          "flatPath": "androidpublisher/v3/developers/{developersId}/users/{usersId}/grants/{grantsId}",
          "path": "androidpublisher/v3/{+name}",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "parameters": {
            "name": {
              "location": "path",
              "type": "string",
              "description": "Required. The name of the grant to delete. Format: developers/{developer}/users/{email}/grants/{package_name}",
              "required": true,
              "pattern": "^developers/[^/]+/users/[^/]+/grants/[^/]+$"
            }
          },
          "description": "Removes all access for the user to the given package or developer account."
        }
      }
    },
    "reviews": {
      "methods": {
        "list": {
          "description": "Lists all reviews.",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "parameters": {
            "maxResults": {
              "format": "uint32",
              "location": "query",
              "type": "integer",
              "description": "How many results the list operation should return."
            },
            "translationLanguage": {
              "type": "string",
              "description": "Language localization code.",
              "location": "query"
            },
            "startIndex": {
              "type": "integer",
              "format": "uint32",
              "location": "query",
              "description": "The index of the first element to return."
            },
            "packageName": {
              "description": "Package name of the app.",
              "type": "string",
              "location": "path",
              "required": true
            },
            "token": {
              "type": "string",
              "location": "query",
              "description": "Pagination token. If empty, list starts at the first review."
            }
          },
          "response": {
            "$ref": "ReviewsListResponse"
          },
          "flatPath": "androidpublisher/v3/applications/{packageName}/reviews",
          "id": "androidpublisher.reviews.list",
          "path": "androidpublisher/v3/applications/{packageName}/reviews",
          "parameterOrder": [
            "packageName"
          ],
          "httpMethod": "GET"
        },
        "reply": {
          "response": {
            "$ref": "ReviewsReplyResponse"
          },
          "description": "Replies to a single review, or updates an existing reply.",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "httpMethod": "POST",
          "parameters": {
            "packageName": {
              "description": "Package name of the app.",
              "location": "path",
              "type": "string",
              "required": true
            },
            "reviewId": {
              "description": "Unique identifier for a review.",
              "location": "path",
              "required": true,
              "type": "string"
            }
          },
          "request": {
            "$ref": "ReviewsReplyRequest"
          },
          "id": "androidpublisher.reviews.reply",
          "path": "androidpublisher/v3/applications/{packageName}/reviews/{reviewId}:reply",
          "parameterOrder": [
            "packageName",
            "reviewId"
          ],
          "flatPath": "androidpublisher/v3/applications/{packageName}/reviews/{reviewId}:reply"
        },
        "get": {
          "httpMethod": "GET",
          "path": "androidpublisher/v3/applications/{packageName}/reviews/{reviewId}",
          "description": "Gets a single review.",
          "response": {
            "$ref": "Review"
          },
          "parameterOrder": [
            "packageName",
            "reviewId"
          ],
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "flatPath": "androidpublisher/v3/applications/{packageName}/reviews/{reviewId}",
          "parameters": {
            "reviewId": {
              "required": true,
              "location": "path",
              "type": "string",
              "description": "Unique identifier for a review."
            },
            "translationLanguage": {
              "type": "string",
              "location": "query",
              "description": "Language localization code."
            },
            "packageName": {
              "type": "string",
              "required": true,
              "description": "Package name of the app.",
              "location": "path"
            }
          },
          "id": "androidpublisher.reviews.get"
        }
      }
    },
    "monetization": {
      "resources": {
        "subscriptions": {
          "resources": {
            "basePlans": {
              "methods": {
                "batchUpdateStates": {
                  "scopes": [
                    "https://www.googleapis.com/auth/androidpublisher"
                  ],
                  "path": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans:batchUpdateStates",
                  "parameters": {
                    "productId": {
                      "required": true,
                      "location": "path",
                      "type": "string",
                      "description": "Required. The product ID of the parent subscription, if all updated base plans belong to the same subscription. If this batch update spans multiple subscriptions, set this field to \"-\". Must be set."
                    },
                    "packageName": {
                      "location": "path",
                      "type": "string",
                      "required": true,
                      "description": "Required. The parent app (package name) of the updated base plans."
                    }
                  },
                  "id": "androidpublisher.monetization.subscriptions.basePlans.batchUpdateStates",
                  "response": {
                    "$ref": "BatchUpdateBasePlanStatesResponse"
                  },
                  "parameterOrder": [
                    "packageName",
                    "productId"
                  ],
                  "request": {
                    "$ref": "BatchUpdateBasePlanStatesRequest"
                  },
                  "flatPath": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans:batchUpdateStates",
                  "httpMethod": "POST",
                  "description": "Activates or deactivates base plans across one or multiple subscriptions. Set the latencyTolerance field on nested requests to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT to achieve maximum update throughput."
                },
                "delete": {
                  "id": "androidpublisher.monetization.subscriptions.basePlans.delete",
                  "parameterOrder": [
                    "packageName",
                    "productId",
                    "basePlanId"
                  ],
                  "httpMethod": "DELETE",
                  "description": "Deletes a base plan. Can only be done for draft base plans. This action is irreversible.",
                  "scopes": [
                    "https://www.googleapis.com/auth/androidpublisher"
                  ],
                  "flatPath": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}",
                  "parameters": {
                    "packageName": {
                      "location": "path",
                      "type": "string",
                      "description": "Required. The parent app (package name) of the base plan to delete.",
                      "required": true
                    },
                    "basePlanId": {
                      "description": "Required. The unique offer ID of the base plan to delete.",
                      "location": "path",
                      "type": "string",
                      "required": true
                    },
                    "productId": {
                      "type": "string",
                      "description": "Required. The parent subscription (ID) of the base plan to delete.",
                      "location": "path",
                      "required": true
                    }
                  },
                  "path": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}"
                },
                "activate": {
                  "parameters": {
                    "basePlanId": {
                      "description": "Required. The unique base plan ID of the base plan to activate.",
                      "required": true,
                      "type": "string",
                      "location": "path"
                    },
                    "packageName": {
                      "description": "Required. The parent app (package name) of the base plan to activate.",
                      "location": "path",
                      "required": true,
                      "type": "string"
                    },
                    "productId": {
                      "required": true,
                      "description": "Required. The parent subscription (ID) of the base plan to activate.",
                      "type": "string",
                      "location": "path"
                    }
                  },
                  "parameterOrder": [
                    "packageName",
                    "productId",
                    "basePlanId"
                  ],
                  "id": "androidpublisher.monetization.subscriptions.basePlans.activate",
                  "flatPath": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}:activate",
                  "path": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}:activate",
                  "request": {
                    "$ref": "ActivateBasePlanRequest"
                  },
                  "description": "Activates a base plan. Once activated, base plans will be available to new subscribers.",
                  "response": {
                    "$ref": "Subscription"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/androidpublisher"
                  ],
                  "httpMethod": "POST"
                },
                "deactivate": {
                  "parameters": {
                    "basePlanId": {
                      "required": true,
                      "description": "Required. The unique base plan ID of the base plan to deactivate.",
                      "location": "path",
                      "type": "string"
                    },
                    "productId": {
                      "description": "Required. The parent subscription (ID) of the base plan to deactivate.",
                      "required": true,
                      "type": "string",
                      "location": "path"
                    },
                    "packageName": {
                      "type": "string",
                      "required": true,
                      "location": "path",
                      "description": "Required. The parent app (package name) of the base plan to deactivate."
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/androidpublisher"
                  ],
                  "response": {
                    "$ref": "Subscription"
                  },
                  "id": "androidpublisher.monetization.subscriptions.basePlans.deactivate",
                  "request": {
                    "$ref": "DeactivateBasePlanRequest"
                  },
                  "parameterOrder": [
                    "packageName",
                    "productId",
                    "basePlanId"
                  ],
                  "path": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}:deactivate",
                  "flatPath": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}:deactivate",
                  "httpMethod": "POST",
                  "description": "Deactivates a base plan. Once deactivated, the base plan will become unavailable to new subscribers, but existing subscribers will maintain their subscription"
                },
                "batchMigratePrices": {
                  "parameters": {
                    "packageName": {
                      "description": "Required. The parent app (package name) for which the subscriptions should be created or updated. Must be equal to the package_name field on all the Subscription resources.",
                      "required": true,
                      "type": "string",
                      "location": "path"
                    },
                    "productId": {
                      "location": "path",
                      "description": "Required. The product ID of the parent subscription, if all updated offers belong to the same subscription. If this batch update spans multiple subscriptions, set this field to \"-\". Must be set.",
                      "type": "string",
                      "required": true
                    }
                  },
                  "description": "Batch variant of the MigrateBasePlanPrices endpoint. Set the latencyTolerance field on nested requests to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT to achieve maximum update throughput.",
                  "flatPath": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans:batchMigratePrices",
                  "id": "androidpublisher.monetization.subscriptions.basePlans.batchMigratePrices",
                  "scopes": [
                    "https://www.googleapis.com/auth/androidpublisher"
                  ],
                  "request": {
                    "$ref": "BatchMigrateBasePlanPricesRequest"
                  },
                  "parameterOrder": [
                    "packageName",
                    "productId"
                  ],
                  "response": {
                    "$ref": "BatchMigrateBasePlanPricesResponse"
                  },
                  "path": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans:batchMigratePrices",
                  "httpMethod": "POST"
                },
                "migratePrices": {
                  "flatPath": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}:migratePrices",
                  "id": "androidpublisher.monetization.subscriptions.basePlans.migratePrices",
                  "httpMethod": "POST",
                  "request": {
                    "$ref": "MigrateBasePlanPricesRequest"
                  },
                  "path": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}:migratePrices",
                  "scopes": [
                    "https://www.googleapis.com/auth/androidpublisher"
                  ],
                  "description": "Migrates subscribers from one or more legacy price cohorts to the current price. Requests result in Google Play notifying affected subscribers. Only up to 250 simultaneous legacy price cohorts are supported.",
                  "parameterOrder": [
                    "packageName",
                    "productId",
                    "basePlanId"
                  ],
                  "response": {
                    "$ref": "MigrateBasePlanPricesResponse"
                  },
                  "parameters": {
                    "basePlanId": {
                      "description": "Required. The unique base plan ID of the base plan to update prices on.",
                      "location": "path",
                      "type": "string",
                      "required": true
                    },
                    "packageName": {
                      "description": "Required. Package name of the parent app. Must be equal to the package_name field on the Subscription resource.",
                      "type": "string",
                      "required": true,
                      "location": "path"
                    },
                    "productId": {
                      "location": "path",
                      "type": "string",
                      "description": "Required. The ID of the subscription to update. Must be equal to the product_id field on the Subscription resource.",
                      "required": true
                    }
                  }
                }
              },
              "resources": {
                "offers": {
                  "methods": {
                    "batchGet": {
                      "description": "Reads one or more subscription offers.",
                      "id": "androidpublisher.monetization.subscriptions.basePlans.offers.batchGet",
                      "flatPath": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers:batchGet",
                      "httpMethod": "POST",
                      "request": {
                        "$ref": "BatchGetSubscriptionOffersRequest"
                      },
                      "parameters": {
                        "productId": {
                          "location": "path",
                          "description": "Required. The product ID of the parent subscription, if all updated offers belong to the same subscription. If this request spans multiple subscriptions, set this field to \"-\". Must be set.",
                          "type": "string",
                          "required": true
                        },
                        "basePlanId": {
                          "location": "path",
                          "description": "Required. The parent base plan (ID) for which the offers should be read. May be specified as '-' to read offers from multiple base plans.",
                          "type": "string",
                          "required": true
                        },
                        "packageName": {
                          "description": "Required. The parent app (package name) for which the subscriptions should be created or updated. Must be equal to the package_name field on all the requests.",
                          "location": "path",
                          "type": "string",
                          "required": true
                        }
                      },
                      "path": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers:batchGet",
                      "parameterOrder": [
                        "packageName",
                        "productId",
                        "basePlanId"
                      ],
                      "response": {
                        "$ref": "BatchGetSubscriptionOffersResponse"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/androidpublisher"
                      ]
                    },
                    "activate": {
                      "response": {
                        "$ref": "SubscriptionOffer"
                      },
                      "httpMethod": "POST",
                      "parameterOrder": [
                        "packageName",
                        "productId",
                        "basePlanId",
                        "offerId"
                      ],
                      "description": "Activates a subscription offer. Once activated, subscription offers will be available to new subscribers.",
                      "path": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers/{offerId}:activate",
                      "scopes": [
                        "https://www.googleapis.com/auth/androidpublisher"
                      ],
                      "id": "androidpublisher.monetization.subscriptions.basePlans.offers.activate",
                      "flatPath": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers/{offerId}:activate",
                      "request": {
                        "$ref": "ActivateSubscriptionOfferRequest"
                      },
                      "parameters": {
                        "offerId": {
                          "type": "string",
                          "location": "path",
                          "description": "Required. The unique offer ID of the offer to activate.",
                          "required": true
                        },
                        "packageName": {
                          "required": true,
                          "description": "Required. The parent app (package name) of the offer to activate.",
                          "type": "string",
                          "location": "path"
                        },
                        "basePlanId": {
                          "description": "Required. The parent base plan (ID) of the offer to activate.",
                          "type": "string",
                          "required": true,
                          "location": "path"
                        },
                        "productId": {
                          "description": "Required. The parent subscription (ID) of the offer to activate.",
                          "location": "path",
                          "type": "string",
                          "required": true
                        }
                      }
                    },
                    "deactivate": {
                      "flatPath": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers/{offerId}:deactivate",
                      "id": "androidpublisher.monetization.subscriptions.basePlans.offers.deactivate",
                      "httpMethod": "POST",
                      "description": "Deactivates a subscription offer. Once deactivated, existing subscribers will maintain their subscription, but the offer will become unavailable to new subscribers.",
                      "path": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers/{offerId}:deactivate",
                      "scopes": [
                        "https://www.googleapis.com/auth/androidpublisher"
                      ],
                      "response": {
                        "$ref": "SubscriptionOffer"
                      },
                      "request": {
                        "$ref": "DeactivateSubscriptionOfferRequest"
                      },
                      "parameters": {
                        "basePlanId": {
                          "type": "string",
                          "location": "path",
                          "description": "Required. The parent base plan (ID) of the offer to deactivate.",
                          "required": true
                        },
                        "productId": {
                          "type": "string",
                          "description": "Required. The parent subscription (ID) of the offer to deactivate.",
                          "required": true,
                          "location": "path"
                        },
                        "packageName": {
                          "required": true,
                          "description": "Required. The parent app (package name) of the offer to deactivate.",
                          "type": "string",
                          "location": "path"
                        },
                        "offerId": {
                          "required": true,
                          "type": "string",
                          "description": "Required. The unique offer ID of the offer to deactivate.",
                          "location": "path"
                        }
                      },
                      "parameterOrder": [
                        "packageName",
                        "productId",
                        "basePlanId",
                        "offerId"
                      ]
                    },
                    "patch": {
                      "id": "androidpublisher.monetization.subscriptions.basePlans.offers.patch",
                      "response": {
                        "$ref": "SubscriptionOffer"
                      },
                      "parameters": {
                        "productId": {
                          "required": true,
                          "description": "Required. Immutable. The ID of the parent subscription this offer belongs to.",
                          "location": "path",
                          "type": "string"
                        },
                        "allowMissing": {
                          "type": "boolean",
                          "location": "query",
                          "description": "Optional. If set to true, and the subscription offer with the given package_name, product_id, base_plan_id and offer_id doesn't exist, an offer will be created. If a new offer is created, update_mask is ignored."
                        },
                        "regionsVersion.version": {
                          "location": "query",
                          "type": "string",
                          "description": "Required. A string representing the version of available regions being used for the specified resource. Regional prices and latest supported version for the resource have to be specified according to the information published in [this article](https://support.google.com/googleplay/android-developer/answer/10532353). Each time the supported locations substantially change, the version will be incremented. Using this field will ensure that creating and updating the resource with an older region's version and set of regional prices and currencies will succeed even though a new version is available."
                        },
                        "latencyTolerance": {
                          "location": "query",
                          "description": "Optional. The latency tolerance for the propagation of this product update. Defaults to latency-sensitive.",
                          "type": "string",
                          "enumDescriptions": [
                            "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
                            "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
                            "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
                          ],
                          "enum": [
                            "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
                            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
                            "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
                          ]
                        },
                        "offerId": {
                          "location": "path",
                          "description": "Required. Immutable. Unique ID of this subscription offer. Must be unique within the base plan.",
                          "required": true,
                          "type": "string"
                        },
                        "basePlanId": {
                          "description": "Required. Immutable. The ID of the base plan to which this offer is an extension.",
                          "required": true,
                          "type": "string",
                          "location": "path"
                        },
                        "packageName": {
                          "location": "path",
                          "description": "Required. Immutable. The package name of the app the parent subscription belongs to.",
                          "type": "string",
                          "required": true
                        },
                        "updateMask": {
                          "format": "google-fieldmask",
                          "type": "string",
                          "location": "query",
                          "description": "Required. The list of fields to be updated."
                        }
                      },
                      "parameterOrder": [
                        "packageName",
                        "productId",
                        "basePlanId",
                        "offerId"
                      ],
                      "description": "Updates an existing subscription offer.",
                      "request": {
                        "$ref": "SubscriptionOffer"
                      },
                      "path": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers/{offerId}",
                      "scopes": [
                        "https://www.googleapis.com/auth/androidpublisher"
                      ],
                      "flatPath": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers/{offerId}",
                      "httpMethod": "PATCH"
                    },
                    "delete": {
                      "flatPath": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers/{offerId}",
                      "parameters": {
                        "productId": {
                          "description": "Required. The parent subscription (ID) of the offer to delete.",
                          "required": true,
                          "type": "string",
                          "location": "path"
                        },
                        "offerId": {
                          "type": "string",
                          "required": true,
                          "description": "Required. The unique offer ID of the offer to delete.",
                          "location": "path"
                        },
                        "packageName": {
                          "description": "Required. The parent app (package name) of the offer to delete.",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "basePlanId": {
                          "required": true,
                          "location": "path",
                          "type": "string",
                          "description": "Required. The parent base plan (ID) of the offer to delete."
                        }
                      },
                      "id": "androidpublisher.monetization.subscriptions.basePlans.offers.delete",
                      "description": "Deletes a subscription offer. Can only be done for draft offers. This action is irreversible.",
                      "scopes": [
                        "https://www.googleapis.com/auth/androidpublisher"
                      ],
                      "httpMethod": "DELETE",
                      "parameterOrder": [
                        "packageName",
                        "productId",
                        "basePlanId",
                        "offerId"
                      ],
                      "path": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers/{offerId}"
                    },
                    "create": {
                      "parameterOrder": [
                        "packageName",
                        "productId",
                        "basePlanId"
                      ],
                      "description": "Creates a new subscription offer. Only auto-renewing base plans can have subscription offers. The offer state will be DRAFT until it is activated.",
                      "request": {
                        "$ref": "SubscriptionOffer"
                      },
                      "httpMethod": "POST",
                      "flatPath": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers",
                      "id": "androidpublisher.monetization.subscriptions.basePlans.offers.create",
                      "scopes": [
                        "https://www.googleapis.com/auth/androidpublisher"
                      ],
                      "parameters": {
                        "productId": {
                          "location": "path",
                          "type": "string",
                          "description": "Required. The parent subscription (ID) for which the offer should be created. Must be equal to the product_id field on the SubscriptionOffer resource.",
                          "required": true
                        },
                        "regionsVersion.version": {
                          "location": "query",
                          "type": "string",
                          "description": "Required. A string representing the version of available regions being used for the specified resource. Regional prices and latest supported version for the resource have to be specified according to the information published in [this article](https://support.google.com/googleplay/android-developer/answer/10532353). Each time the supported locations substantially change, the version will be incremented. Using this field will ensure that creating and updating the resource with an older region's version and set of regional prices and currencies will succeed even though a new version is available."
                        },
                        "offerId": {
                          "type": "string",
                          "location": "query",
                          "description": "Required. The ID to use for the offer. For the requirements on this format, see the documentation of the offer_id field on the SubscriptionOffer resource."
                        },
                        "packageName": {
                          "required": true,
                          "description": "Required. The parent app (package name) for which the offer should be created. Must be equal to the package_name field on the Subscription resource.",
                          "location": "path",
                          "type": "string"
                        },
                        "basePlanId": {
                          "description": "Required. The parent base plan (ID) for which the offer should be created. Must be equal to the base_plan_id field on the SubscriptionOffer resource.",
                          "required": true,
                          "type": "string",
                          "location": "path"
                        }
                      },
                      "response": {
                        "$ref": "SubscriptionOffer"
                      },
                      "path": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers"
                    },
                    "batchUpdateStates": {
                      "flatPath": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers:batchUpdateStates",
                      "path": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers:batchUpdateStates",
                      "parameters": {
                        "basePlanId": {
                          "location": "path",
                          "required": true,
                          "type": "string",
                          "description": "Required. The parent base plan (ID) for which the offers should be updated. May be specified as '-' to update offers from multiple base plans."
                        },
                        "packageName": {
                          "description": "Required. The parent app (package name) of the updated subscription offers. Must be equal to the package_name field on all the updated SubscriptionOffer resources.",
                          "location": "path",
                          "required": true,
                          "type": "string"
                        },
                        "productId": {
                          "description": "Required. The product ID of the parent subscription, if all updated offers belong to the same subscription. If this request spans multiple subscriptions, set this field to \"-\". Must be set.",
                          "type": "string",
                          "required": true,
                          "location": "path"
                        }
                      },
                      "description": "Updates a batch of subscription offer states. Set the latencyTolerance field on nested requests to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT to achieve maximum update throughput.",
                      "request": {
                        "$ref": "BatchUpdateSubscriptionOfferStatesRequest"
                      },
                      "id": "androidpublisher.monetization.subscriptions.basePlans.offers.batchUpdateStates",
                      "scopes": [
                        "https://www.googleapis.com/auth/androidpublisher"
                      ],
                      "parameterOrder": [
                        "packageName",
                        "productId",
                        "basePlanId"
                      ],
                      "httpMethod": "POST",
                      "response": {
                        "$ref": "BatchUpdateSubscriptionOfferStatesResponse"
                      }
                    },
                    "batchUpdate": {
                      "description": "Updates a batch of subscription offers. Set the latencyTolerance field on nested requests to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT to achieve maximum update throughput.",
                      "request": {
                        "$ref": "BatchUpdateSubscriptionOffersRequest"
                      },
                      "id": "androidpublisher.monetization.subscriptions.basePlans.offers.batchUpdate",
                      "parameters": {
                        "packageName": {
                          "location": "path",
                          "type": "string",
                          "required": true,
                          "description": "Required. The parent app (package name) of the updated subscription offers. Must be equal to the package_name field on all the updated SubscriptionOffer resources."
                        },
                        "basePlanId": {
                          "required": true,
                          "description": "Required. The parent base plan (ID) for which the offers should be updated. May be specified as '-' to update offers from multiple base plans.",
                          "type": "string",
                          "location": "path"
                        },
                        "productId": {
                          "location": "path",
                          "type": "string",
                          "description": "Required. The product ID of the parent subscription, if all updated offers belong to the same subscription. If this request spans multiple subscriptions, set this field to \"-\". Must be set.",
                          "required": true
                        }
                      },
                      "flatPath": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers:batchUpdate",
                      "parameterOrder": [
                        "packageName",
                        "productId",
                        "basePlanId"
                      ],
                      "response": {
                        "$ref": "BatchUpdateSubscriptionOffersResponse"
                      },
                      "httpMethod": "POST",
                      "path": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers:batchUpdate",
                      "scopes": [
                        "https://www.googleapis.com/auth/androidpublisher"
                      ]
                    },
                    "list": {
                      "response": {
                        "$ref": "ListSubscriptionOffersResponse"
                      },
                      "parameters": {
                        "pageToken": {
                          "location": "query",
                          "type": "string",
                          "description": "A page token, received from a previous `ListSubscriptionsOffers` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListSubscriptionOffers` must match the call that provided the page token."
                        },
                        "productId": {
                          "description": "Required. The parent subscription (ID) for which the offers should be read. May be specified as '-' to read all offers under an app.",
                          "type": "string",
                          "location": "path",
                          "required": true
                        },
                        "packageName": {
                          "location": "path",
                          "type": "string",
                          "description": "Required. The parent app (package name) for which the subscriptions should be read.",
                          "required": true
                        },
                        "pageSize": {
                          "type": "integer",
                          "description": "The maximum number of subscriptions to return. The service may return fewer than this value. If unspecified, at most 50 subscriptions will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.",
                          "location": "query",
                          "format": "int32"
                        },
                        "basePlanId": {
                          "required": true,
                          "location": "path",
                          "type": "string",
                          "description": "Required. The parent base plan (ID) for which the offers should be read. May be specified as '-' to read all offers under a subscription or an app. Must be specified as '-' if product_id is specified as '-'."
                        }
                      },
                      "description": "Lists all offers under a given subscription.",
                      "id": "androidpublisher.monetization.subscriptions.basePlans.offers.list",
                      "parameterOrder": [
                        "packageName",
                        "productId",
                        "basePlanId"
                      ],
                      "httpMethod": "GET",
                      "scopes": [
                        "https://www.googleapis.com/auth/androidpublisher"
                      ],
                      "path": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers",
                      "flatPath": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers"
                    },
                    "get": {
                      "flatPath": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers/{offerId}",
                      "id": "androidpublisher.monetization.subscriptions.basePlans.offers.get",
                      "description": "Reads a single offer",
                      "parameterOrder": [
                        "packageName",
                        "productId",
                        "basePlanId",
                        "offerId"
                      ],
                      "parameters": {
                        "productId": {
                          "location": "path",
                          "description": "Required. The parent subscription (ID) of the offer to get.",
                          "required": true,
                          "type": "string"
                        },
                        "packageName": {
                          "required": true,
                          "type": "string",
                          "location": "path",
                          "description": "Required. The parent app (package name) of the offer to get."
                        },
                        "offerId": {
                          "location": "path",
                          "type": "string",
                          "required": true,
                          "description": "Required. The unique offer ID of the offer to get."
                        },
                        "basePlanId": {
                          "required": true,
                          "type": "string",
                          "description": "Required. The parent base plan (ID) of the offer to get.",
                          "location": "path"
                        }
                      },
                      "path": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}/basePlans/{basePlanId}/offers/{offerId}",
                      "httpMethod": "GET",
                      "scopes": [
                        "https://www.googleapis.com/auth/androidpublisher"
                      ],
                      "response": {
                        "$ref": "SubscriptionOffer"
                      }
                    }
                  }
                }
              }
            }
          },
          "methods": {
            "get": {
              "parameterOrder": [
                "packageName",
                "productId"
              ],
              "parameters": {
                "packageName": {
                  "required": true,
                  "location": "path",
                  "description": "Required. The parent app (package name) of the subscription to get.",
                  "type": "string"
                },
                "productId": {
                  "location": "path",
                  "description": "Required. The unique product ID of the subscription to get.",
                  "required": true,
                  "type": "string"
                }
              },
              "flatPath": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}",
              "id": "androidpublisher.monetization.subscriptions.get",
              "path": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}",
              "response": {
                "$ref": "Subscription"
              },
              "description": "Reads a single subscription.",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "httpMethod": "GET"
            },
            "create": {
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "description": "Creates a new subscription. Newly added base plans will remain in draft state until activated.",
              "flatPath": "androidpublisher/v3/applications/{packageName}/subscriptions",
              "httpMethod": "POST",
              "parameterOrder": [
                "packageName"
              ],
              "response": {
                "$ref": "Subscription"
              },
              "path": "androidpublisher/v3/applications/{packageName}/subscriptions",
              "parameters": {
                "packageName": {
                  "required": true,
                  "type": "string",
                  "description": "Required. The parent app (package name) for which the subscription should be created. Must be equal to the package_name field on the Subscription resource.",
                  "location": "path"
                },
                "productId": {
                  "location": "query",
                  "type": "string",
                  "description": "Required. The ID to use for the subscription. For the requirements on this format, see the documentation of the product_id field on the Subscription resource."
                },
                "regionsVersion.version": {
                  "type": "string",
                  "location": "query",
                  "description": "Required. A string representing the version of available regions being used for the specified resource. Regional prices and latest supported version for the resource have to be specified according to the information published in [this article](https://support.google.com/googleplay/android-developer/answer/10532353). Each time the supported locations substantially change, the version will be incremented. Using this field will ensure that creating and updating the resource with an older region's version and set of regional prices and currencies will succeed even though a new version is available."
                }
              },
              "id": "androidpublisher.monetization.subscriptions.create",
              "request": {
                "$ref": "Subscription"
              }
            },
            "batchUpdate": {
              "response": {
                "$ref": "BatchUpdateSubscriptionsResponse"
              },
              "parameterOrder": [
                "packageName"
              ],
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "id": "androidpublisher.monetization.subscriptions.batchUpdate",
              "httpMethod": "POST",
              "description": "Updates a batch of subscriptions. Set the latencyTolerance field on nested requests to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT to achieve maximum update throughput.",
              "parameters": {
                "packageName": {
                  "required": true,
                  "type": "string",
                  "location": "path",
                  "description": "Required. The parent app (package name) for which the subscriptions should be updated. Must be equal to the package_name field on all the Subscription resources."
                }
              },
              "path": "androidpublisher/v3/applications/{packageName}/subscriptions:batchUpdate",
              "flatPath": "androidpublisher/v3/applications/{packageName}/subscriptions:batchUpdate",
              "request": {
                "$ref": "BatchUpdateSubscriptionsRequest"
              }
            },
            "archive": {
              "flatPath": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}:archive",
              "httpMethod": "POST",
              "description": "Deprecated: subscription archiving is not supported.",
              "path": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}:archive",
              "parameterOrder": [
                "packageName",
                "productId"
              ],
              "request": {
                "$ref": "ArchiveSubscriptionRequest"
              },
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "response": {
                "$ref": "Subscription"
              },
              "id": "androidpublisher.monetization.subscriptions.archive",
              "deprecated": true,
              "parameters": {
                "packageName": {
                  "location": "path",
                  "type": "string",
                  "required": true,
                  "description": "Required. The parent app (package name) of the app of the subscription to delete."
                },
                "productId": {
                  "required": true,
                  "location": "path",
                  "type": "string",
                  "description": "Required. The unique product ID of the subscription to delete."
                }
              }
            },
            "list": {
              "flatPath": "androidpublisher/v3/applications/{packageName}/subscriptions",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "parameters": {
                "showArchived": {
                  "type": "boolean",
                  "location": "query",
                  "description": "Deprecated: subscription archiving is not supported.",
                  "deprecated": true
                },
                "packageName": {
                  "description": "Required. The parent app (package name) for which the subscriptions should be read.",
                  "location": "path",
                  "type": "string",
                  "required": true
                },
                "pageToken": {
                  "location": "query",
                  "description": "A page token, received from a previous `ListSubscriptions` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListSubscriptions` must match the call that provided the page token.",
                  "type": "string"
                },
                "pageSize": {
                  "type": "integer",
                  "format": "int32",
                  "description": "The maximum number of subscriptions to return. The service may return fewer than this value. If unspecified, at most 50 subscriptions will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.",
                  "location": "query"
                }
              },
              "id": "androidpublisher.monetization.subscriptions.list",
              "httpMethod": "GET",
              "path": "androidpublisher/v3/applications/{packageName}/subscriptions",
              "response": {
                "$ref": "ListSubscriptionsResponse"
              },
              "parameterOrder": [
                "packageName"
              ],
              "description": "Lists all subscriptions under a given app."
            },
            "batchGet": {
              "path": "androidpublisher/v3/applications/{packageName}/subscriptions:batchGet",
              "parameters": {
                "packageName": {
                  "type": "string",
                  "location": "path",
                  "description": "Required. The parent app (package name) for which the subscriptions should be retrieved. Must be equal to the package_name field on all the requests.",
                  "required": true
                },
                "productIds": {
                  "location": "query",
                  "description": "Required. A list of up to 100 subscription product IDs to retrieve. All the IDs must be different.",
                  "repeated": true,
                  "type": "string"
                }
              },
              "flatPath": "androidpublisher/v3/applications/{packageName}/subscriptions:batchGet",
              "description": "Reads one or more subscriptions.",
              "parameterOrder": [
                "packageName"
              ],
              "response": {
                "$ref": "BatchGetSubscriptionsResponse"
              },
              "id": "androidpublisher.monetization.subscriptions.batchGet",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "httpMethod": "GET"
            },
            "delete": {
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "flatPath": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}",
              "description": "Deletes a subscription. A subscription can only be deleted if it has never had a base plan published.",
              "httpMethod": "DELETE",
              "path": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}",
              "parameters": {
                "packageName": {
                  "type": "string",
                  "location": "path",
                  "required": true,
                  "description": "Required. The parent app (package name) of the app of the subscription to delete."
                },
                "productId": {
                  "description": "Required. The unique product ID of the subscription to delete.",
                  "type": "string",
                  "required": true,
                  "location": "path"
                }
              },
              "id": "androidpublisher.monetization.subscriptions.delete",
              "parameterOrder": [
                "packageName",
                "productId"
              ]
            },
            "patch": {
              "httpMethod": "PATCH",
              "request": {
                "$ref": "Subscription"
              },
              "path": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}",
              "flatPath": "androidpublisher/v3/applications/{packageName}/subscriptions/{productId}",
              "response": {
                "$ref": "Subscription"
              },
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "parameterOrder": [
                "packageName",
                "productId"
              ],
              "parameters": {
                "packageName": {
                  "required": true,
                  "description": "Immutable. Package name of the parent app.",
                  "type": "string",
                  "location": "path"
                },
                "allowMissing": {
                  "location": "query",
                  "type": "boolean",
                  "description": "Optional. If set to true, and the subscription with the given package_name and product_id doesn't exist, the subscription will be created. If a new subscription is created, update_mask is ignored."
                },
                "regionsVersion.version": {
                  "description": "Required. A string representing the version of available regions being used for the specified resource. Regional prices and latest supported version for the resource have to be specified according to the information published in [this article](https://support.google.com/googleplay/android-developer/answer/10532353). Each time the supported locations substantially change, the version will be incremented. Using this field will ensure that creating and updating the resource with an older region's version and set of regional prices and currencies will succeed even though a new version is available.",
                  "location": "query",
                  "type": "string"
                },
                "productId": {
                  "location": "path",
                  "description": "Immutable. Unique product ID of the product. Unique within the parent app. Product IDs must be composed of lower-case letters (a-z), numbers (0-9), underscores (_) and dots (.). It must start with a lower-case letter or number, and be between 1 and 40 (inclusive) characters in length.",
                  "required": true,
                  "type": "string"
                },
                "updateMask": {
                  "description": "Required. The list of fields to be updated.",
                  "location": "query",
                  "format": "google-fieldmask",
                  "type": "string"
                },
                "latencyTolerance": {
                  "location": "query",
                  "enum": [
                    "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
                    "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
                    "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
                  ],
                  "description": "Optional. The latency tolerance for the propagation of this product update. Defaults to latency-sensitive.",
                  "enumDescriptions": [
                    "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
                    "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
                    "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
                  ],
                  "type": "string"
                }
              },
              "description": "Updates an existing subscription.",
              "id": "androidpublisher.monetization.subscriptions.patch"
            }
          }
        },
        "onetimeproducts": {
          "methods": {
            "delete": {
              "flatPath": "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}",
              "path": "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}",
              "id": "androidpublisher.monetization.onetimeproducts.delete",
              "parameters": {
                "productId": {
                  "type": "string",
                  "required": true,
                  "location": "path",
                  "description": "Required. The one-time product ID of the one-time product to delete."
                },
                "latencyTolerance": {
                  "enum": [
                    "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
                    "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
                    "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
                  ],
                  "description": "Optional. The latency tolerance for the propagation of this product update. Defaults to latency-sensitive.",
                  "location": "query",
                  "type": "string",
                  "enumDescriptions": [
                    "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
                    "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
                    "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
                  ]
                },
                "packageName": {
                  "type": "string",
                  "location": "path",
                  "description": "Required. The parent app (package name) of the one-time product to delete.",
                  "required": true
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "parameterOrder": [
                "packageName",
                "productId"
              ],
              "description": "Deletes a one-time product.",
              "httpMethod": "DELETE"
            },
            "list": {
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "response": {
                "$ref": "ListOneTimeProductsResponse"
              },
              "path": "androidpublisher/v3/applications/{packageName}/oneTimeProducts",
              "parameters": {
                "packageName": {
                  "required": true,
                  "description": "Required. The parent app (package name) for which the one-time product should be read.",
                  "type": "string",
                  "location": "path"
                },
                "pageSize": {
                  "format": "int32",
                  "type": "integer",
                  "location": "query",
                  "description": "Optional. The maximum number of one-time product to return. The service may return fewer than this value. If unspecified, at most 50 one-time products will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000."
                },
                "pageToken": {
                  "description": "Optional. A page token, received from a previous `ListOneTimeProducts` call. Provide this to retrieve the subsequent page. When paginating, all other parameters provided to `ListOneTimeProducts` must match the call that provided the page token.",
                  "location": "query",
                  "type": "string"
                }
              },
              "description": "Lists all one-time products under a given app.",
              "httpMethod": "GET",
              "parameterOrder": [
                "packageName"
              ],
              "flatPath": "androidpublisher/v3/applications/{packageName}/oneTimeProducts",
              "id": "androidpublisher.monetization.onetimeproducts.list"
            },
            "batchDelete": {
              "httpMethod": "POST",
              "parameterOrder": [
                "packageName"
              ],
              "description": "Deletes one or more one-time products.",
              "request": {
                "$ref": "BatchDeleteOneTimeProductsRequest"
              },
              "flatPath": "androidpublisher/v3/applications/{packageName}/oneTimeProducts:batchDelete",
              "id": "androidpublisher.monetization.onetimeproducts.batchDelete",
              "path": "androidpublisher/v3/applications/{packageName}/oneTimeProducts:batchDelete",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "parameters": {
                "packageName": {
                  "type": "string",
                  "location": "path",
                  "required": true,
                  "description": "Required. The parent app (package name) for which the one-time products should be deleted. Must be equal to the package_name field on all the requests."
                }
              }
            },
            "patch": {
              "id": "androidpublisher.monetization.onetimeproducts.patch",
              "parameters": {
                "latencyTolerance": {
                  "type": "string",
                  "description": "Optional. The latency tolerance for the propagation of this product upsert. Defaults to latency-sensitive.",
                  "enumDescriptions": [
                    "Defaults to PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE.",
                    "The update will propagate to clients within several minutes on average and up to a few hours in rare cases. Throughput is limited to 7,200 updates per app per hour.",
                    "The update will propagate to clients within 24 hours. Supports high throughput of up to 720,000 updates per app per hour using batch modification methods."
                  ],
                  "location": "query",
                  "enum": [
                    "PRODUCT_UPDATE_LATENCY_TOLERANCE_UNSPECIFIED",
                    "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_SENSITIVE",
                    "PRODUCT_UPDATE_LATENCY_TOLERANCE_LATENCY_TOLERANT"
                  ]
                },
                "productId": {
                  "description": "Required. Immutable. Unique product ID of the product. Unique within the parent app. Product IDs must start with a number or lowercase letter, and can contain numbers (0-9), lowercase letters (a-z), underscores (_), and periods (.).",
                  "required": true,
                  "location": "path",
                  "type": "string"
                },
                "allowMissing": {
                  "location": "query",
                  "description": "Optional. If set to true, and the one-time product with the given package_name and product_id doesn't exist, the one-time product will be created. If a new one-time product is created, update_mask is ignored.",
                  "type": "boolean"
                },
                "updateMask": {
                  "type": "string",
                  "description": "Required. The list of fields to be updated.",
                  "format": "google-fieldmask",
                  "location": "query"
                },
                "regionsVersion.version": {
                  "description": "Required. A string representing the version of available regions being used for the specified resource. Regional prices and latest supported version for the resource have to be specified according to the information published in [this article](https://support.google.com/googleplay/android-developer/answer/10532353). Each time the supported locations substantially change, the version will be incremented. Using this field will ensure that creating and updating the resource with an older region's version and set of regional prices and currencies will succeed even though a new version is available.",
                  "location": "query",
                  "type": "string"
                },
                "packageName": {
                  "description": "Required. Immutable. Package name of the parent app.",
                  "required": true,
                  "type": "string",
                  "location": "path"
                }
              },
              "flatPath": "androidpublisher/v3/applications/{packageName}/onetimeproducts/{productId}",
              "path": "androidpublisher/v3/applications/{packageName}/onetimeproducts/{productId}",
              "description": "Creates or updates a one-time product.",
              "parameterOrder": [
                "packageName",
                "productId"
              ],
              "request": {
                "$ref": "OneTimeProduct"
              },
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "httpMethod": "PATCH",
              "response": {
                "$ref": "OneTimeProduct"
              }
            },
            "batchGet": {
              "path": "androidpublisher/v3/applications/{packageName}/oneTimeProducts:batchGet",
              "response": {
                "$ref": "BatchGetOneTimeProductsResponse"
              },
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "httpMethod": "GET",
              "id": "androidpublisher.monetization.onetimeproducts.batchGet",
              "description": "Reads one or more one-time products.",
              "parameters": {
                "packageName": {
                  "location": "path",
                  "type": "string",
                  "required": true,
                  "description": "Required. The parent app (package name) for which the products should be retrieved."
                },
                "productIds": {
                  "repeated": true,
                  "location": "query",
                  "type": "string",
                  "description": "Required. A list of up to 100 product IDs to retrieve. All IDs must be different."
                }
              },
              "parameterOrder": [
                "packageName"
              ],
              "flatPath": "androidpublisher/v3/applications/{packageName}/oneTimeProducts:batchGet"
            },
            "get": {
              "httpMethod": "GET",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "description": "Reads a single one-time product.",
              "path": "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}",
              "response": {
                "$ref": "OneTimeProduct"
              },
              "flatPath": "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}",
              "id": "androidpublisher.monetization.onetimeproducts.get",
              "parameterOrder": [
                "packageName",
                "productId"
              ],
              "parameters": {
                "packageName": {
                  "location": "path",
                  "description": "Required. The parent app (package name) of the product to retrieve.",
                  "type": "string",
                  "required": true
                },
                "productId": {
                  "required": true,
                  "description": "Required. The product ID of the product to retrieve.",
                  "location": "path",
                  "type": "string"
                }
              }
            },
            "batchUpdate": {
              "flatPath": "androidpublisher/v3/applications/{packageName}/oneTimeProducts:batchUpdate",
              "httpMethod": "POST",
              "path": "androidpublisher/v3/applications/{packageName}/oneTimeProducts:batchUpdate",
              "parameterOrder": [
                "packageName"
              ],
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "response": {
                "$ref": "BatchUpdateOneTimeProductsResponse"
              },
              "id": "androidpublisher.monetization.onetimeproducts.batchUpdate",
              "request": {
                "$ref": "BatchUpdateOneTimeProductsRequest"
              },
              "description": "Creates or updates one or more one-time products.",
              "parameters": {
                "packageName": {
                  "type": "string",
                  "required": true,
                  "description": "Required. The parent app (package name) for which the one-time products should be updated. Must be equal to the package_name field on all the OneTimeProduct resources.",
                  "location": "path"
                }
              }
            }
          },
          "resources": {
            "purchaseOptions": {
              "resources": {
                "offers": {
                  "methods": {
                    "deactivate": {
                      "parameters": {
                        "offerId": {
                          "required": true,
                          "location": "path",
                          "description": "Required. The offer ID of the offer to deactivate.",
                          "type": "string"
                        },
                        "purchaseOptionId": {
                          "location": "path",
                          "type": "string",
                          "required": true,
                          "description": "Required. The parent purchase option (ID) of the offer to deactivate."
                        },
                        "packageName": {
                          "description": "Required. The parent app (package name) of the offer to deactivate.",
                          "location": "path",
                          "type": "string",
                          "required": true
                        },
                        "productId": {
                          "required": true,
                          "type": "string",
                          "description": "Required. The parent one-time product (ID) of the offer to deactivate.",
                          "location": "path"
                        }
                      },
                      "response": {
                        "$ref": "OneTimeProductOffer"
                      },
                      "path": "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions/{purchaseOptionId}/offers/{offerId}:deactivate",
                      "scopes": [
                        "https://www.googleapis.com/auth/androidpublisher"
                      ],
                      "parameterOrder": [
                        "packageName",
                        "productId",
                        "purchaseOptionId",
                        "offerId"
                      ],
                      "id": "androidpublisher.monetization.onetimeproducts.purchaseOptions.offers.deactivate",
                      "request": {
                        "$ref": "DeactivateOneTimeProductOfferRequest"
                      },
                      "description": "Deactivates a one-time product offer.",
                      "httpMethod": "POST",
                      "flatPath": "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions/{purchaseOptionId}/offers/{offerId}:deactivate"
                    },
                    "batchUpdateStates": {
                      "request": {
                        "$ref": "BatchUpdateOneTimeProductOfferStatesRequest"
                      },
                      "flatPath": "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions/{purchaseOptionId}/offers:batchUpdateStates",
                      "path": "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions/{purchaseOptionId}/offers:batchUpdateStates",
                      "parameters": {
                        "packageName": {
                          "description": "Required. The parent app (package name) of the updated one-time product offers.",
                          "location": "path",
                          "type": "string",
                          "required": true
                        },
                        "purchaseOptionId": {
                          "type": "string",
                          "description": "Required. The purchase option ID of the parent purchase option, if all updated offers belong to the same purchase option. If this batch update spans multiple purchase options, set this field to \"-\".",
                          "required": true,
                          "location": "path"
                        },
                        "productId": {
                          "required": true,
                          "location": "path",
                          "type": "string",
                          "description": "Required. The product ID of the parent one-time product, if all updated offers belong to the same one-time product. If this batch update spans multiple one-time products, set this field to \"-\"."
                        }
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/androidpublisher"
                      ],
                      "httpMethod": "POST",
                      "response": {
                        "$ref": "BatchUpdateOneTimeProductOfferStatesResponse"
                      },
                      "parameterOrder": [
                        "packageName",
                        "productId",
                        "purchaseOptionId"
                      ],
                      "id": "androidpublisher.monetization.onetimeproducts.purchaseOptions.offers.batchUpdateStates",
                      "description": "Updates a batch of one-time product offer states."
                    },
                    "batchUpdate": {
                      "id": "androidpublisher.monetization.onetimeproducts.purchaseOptions.offers.batchUpdate",
                      "flatPath": "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions/{purchaseOptionId}/offers:batchUpdate",
                      "httpMethod": "POST",
                      "description": "Creates or updates one or more one-time product offers.",
                      "path": "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions/{purchaseOptionId}/offers:batchUpdate",
                      "response": {
                        "$ref": "BatchUpdateOneTimeProductOffersResponse"
                      },
                      "request": {
                        "$ref": "BatchUpdateOneTimeProductOffersRequest"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/androidpublisher"
                      ],
                      "parameters": {
                        "productId": {
                          "location": "path",
                          "type": "string",
                          "required": true,
                          "description": "Required. The product ID of the parent one-time product, if all updated offers belong to the same product. If this request spans multiple one-time products, set this field to \"-\"."
                        },
                        "purchaseOptionId": {
                          "description": "Required. The parent purchase option (ID) for which the offers should be updated. May be specified as '-' to update offers from multiple purchase options.",
                          "required": true,
                          "type": "string",
                          "location": "path"
                        },
                        "packageName": {
                          "location": "path",
                          "required": true,
                          "type": "string",
                          "description": "Required. The parent app (package name) of the updated offers. Must be equal to the package_name field on all the updated OneTimeProductOffer resources."
                        }
                      },
                      "parameterOrder": [
                        "packageName",
                        "productId",
                        "purchaseOptionId"
                      ]
                    },
                    "list": {
                      "parameters": {
                        "packageName": {
                          "type": "string",
                          "required": true,
                          "description": "Required. The parent app (package name) for which the offers should be read.",
                          "location": "path"
                        },
                        "pageToken": {
                          "type": "string",
                          "location": "query",
                          "description": "Optional. A page token, received from a previous `ListOneTimeProductOffers` call. Provide this to retrieve the subsequent page. When paginating, product_id, package_name and purchase_option_id provided to `ListOneTimeProductOffersRequest` must match the call that provided the page token."
                        },
                        "purchaseOptionId": {
                          "location": "path",
                          "required": true,
                          "type": "string",
                          "description": "Required. The parent purchase option (ID) for which the offers should be read. May be specified as '-' to read all offers under a one-time product or an app. Must be specified as '-' if product_id is specified as '-'."
                        },
                        "productId": {
                          "required": true,
                          "type": "string",
                          "description": "Required. The parent one-time product (ID) for which the offers should be read. May be specified as '-' to read all offers under an app.",
                          "location": "path"
                        },
                        "pageSize": {
                          "location": "query",
                          "description": "Optional. The maximum number of offers to return. The service may return fewer than this value. If unspecified, at most 50 offers will be returned. The maximum value is 1000; values above 1000 will be coerced to 1000.",
                          "format": "int32",
                          "type": "integer"
                        }
                      },
                      "response": {
                        "$ref": "ListOneTimeProductOffersResponse"
                      },
                      "description": "Lists all offers under a given app, product, or purchase option.",
                      "parameterOrder": [
                        "packageName",
                        "productId",
                        "purchaseOptionId"
                      ],
                      "id": "androidpublisher.monetization.onetimeproducts.purchaseOptions.offers.list",
                      "httpMethod": "GET",
                      "path": "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions/{purchaseOptionId}/offers",
                      "flatPath": "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions/{purchaseOptionId}/offers",
                      "scopes": [
                        "https://www.googleapis.com/auth/androidpublisher"
                      ]
                    },
                    "batchDelete": {
                      "parameters": {
                        "purchaseOptionId": {
                          "required": true,
                          "type": "string",
                          "description": "Required. The parent purchase option (ID) for which the offers should be deleted. May be specified as '-' to delete offers from multiple purchase options.",
                          "location": "path"
                        },
                        "productId": {
                          "required": true,
                          "type": "string",
                          "location": "path",
                          "description": "Required. The product ID of the parent one-time product, if all offers to delete belong to the same product. If this request spans multiple one-time products, set this field to \"-\"."
                        },
                        "packageName": {
                          "description": "Required. The parent app (package name) of the offers to delete. Must be equal to the package_name field on all the requests.",
                          "required": true,
                          "location": "path",
                          "type": "string"
                        }
                      },
                      "request": {
                        "$ref": "BatchDeleteOneTimeProductOffersRequest"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/androidpublisher"
                      ],
                      "parameterOrder": [
                        "packageName",
                        "productId",
                        "purchaseOptionId"
                      ],
                      "path": "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions/{purchaseOptionId}/offers:batchDelete",
                      "description": "Deletes one or more one-time product offers.",
                      "id": "androidpublisher.monetization.onetimeproducts.purchaseOptions.offers.batchDelete",
                      "httpMethod": "POST",
                      "flatPath": "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions/{purchaseOptionId}/offers:batchDelete"
                    },
                    "cancel": {
                      "path": "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions/{purchaseOptionId}/offers/{offerId}:cancel",
                      "description": "Cancels a one-time product offer.",
                      "id": "androidpublisher.monetization.onetimeproducts.purchaseOptions.offers.cancel",
                      "scopes": [
                        "https://www.googleapis.com/auth/androidpublisher"
                      ],
                      "response": {
                        "$ref": "OneTimeProductOffer"
                      },
                      "parameters": {
                        "purchaseOptionId": {
                          "required": true,
                          "location": "path",
                          "description": "Required. The parent purchase option (ID) of the offer to cancel.",
                          "type": "string"
                        },
                        "offerId": {
                          "type": "string",
                          "description": "Required. The offer ID of the offer to cancel.",
                          "location": "path",
                          "required": true
                        },
                        "packageName": {
                          "location": "path",
                          "description": "Required. The parent app (package name) of the offer to cancel.",
                          "type": "string",
                          "required": true
                        },
                        "productId": {
                          "required": true,
                          "description": "Required. The parent one-time product (ID) of the offer to cancel.",
                          "type": "string",
                          "location": "path"
                        }
                      },
                      "parameterOrder": [
                        "packageName",
                        "productId",
                        "purchaseOptionId",
                        "offerId"
                      ],
                      "httpMethod": "POST",
                      "flatPath": "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions/{purchaseOptionId}/offers/{offerId}:cancel",
                      "request": {
                        "$ref": "CancelOneTimeProductOfferRequest"
                      }
                    },
                    "batchGet": {
                      "parameterOrder": [
                        "packageName",
                        "productId",
                        "purchaseOptionId"
                      ],
                      "description": "Reads one or more one-time product offers.",
                      "request": {
                        "$ref": "BatchGetOneTimeProductOffersRequest"
                      },
                      "response": {
                        "$ref": "BatchGetOneTimeProductOffersResponse"
                      },
                      "parameters": {
                        "productId": {
                          "required": true,
                          "description": "Required. The product ID of the parent one-time product, if all offers belong to the same product. If this request spans multiple one-time products, set this field to \"-\".",
                          "location": "path",
                          "type": "string"
                        },
                        "purchaseOptionId": {
                          "required": true,
                          "type": "string",
                          "description": "Required. The parent purchase option (ID) for which the offers should be retrieved. May be specified as '-' to retrieve offers from multiple purchase options.",
                          "location": "path"
                        },
                        "packageName": {
                          "description": "Required. The parent app (package name) of the offers to retrieve. Must be equal to the package_name field on all the requests.",
                          "location": "path",
                          "type": "string",
                          "required": true
                        }
                      },
                      "httpMethod": "POST",
                      "scopes": [
                        "https://www.googleapis.com/auth/androidpublisher"
                      ],
                      "path": "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions/{purchaseOptionId}/offers:batchGet",
                      "id": "androidpublisher.monetization.onetimeproducts.purchaseOptions.offers.batchGet",
                      "flatPath": "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions/{purchaseOptionId}/offers:batchGet"
                    },
                    "activate": {
                      "description": "Activates a one-time product offer.",
                      "request": {
                        "$ref": "ActivateOneTimeProductOfferRequest"
                      },
                      "flatPath": "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions/{purchaseOptionId}/offers/{offerId}:activate",
                      "httpMethod": "POST",
                      "path": "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions/{purchaseOptionId}/offers/{offerId}:activate",
                      "parameterOrder": [
                        "packageName",
                        "productId",
                        "purchaseOptionId",
                        "offerId"
                      ],
                      "id": "androidpublisher.monetization.onetimeproducts.purchaseOptions.offers.activate",
                      "parameters": {
                        "productId": {
                          "required": true,
                          "description": "Required. The parent one-time product (ID) of the offer to activate.",
                          "type": "string",
                          "location": "path"
                        },
                        "purchaseOptionId": {
                          "required": true,
                          "description": "Required. The parent purchase option (ID) of the offer to activate.",
                          "type": "string",
                          "location": "path"
                        },
                        "offerId": {
                          "description": "Required. The offer ID of the offer to activate.",
                          "location": "path",
                          "type": "string",
                          "required": true
                        },
                        "packageName": {
                          "description": "Required. The parent app (package name) of the offer to activate.",
                          "location": "path",
                          "type": "string",
                          "required": true
                        }
                      },
                      "response": {
                        "$ref": "OneTimeProductOffer"
                      },
                      "scopes": [
                        "https://www.googleapis.com/auth/androidpublisher"
                      ]
                    }
                  }
                }
              },
              "methods": {
                "batchUpdateStates": {
                  "flatPath": "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions:batchUpdateStates",
                  "parameters": {
                    "packageName": {
                      "description": "Required. The parent app (package name) of the updated purchase options.",
                      "location": "path",
                      "type": "string",
                      "required": true
                    },
                    "productId": {
                      "location": "path",
                      "description": "Required. The product ID of the parent one-time product, if all updated purchase options belong to the same one-time product. If this batch update spans multiple one-time products, set this field to \"-\".",
                      "required": true,
                      "type": "string"
                    }
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/androidpublisher"
                  ],
                  "id": "androidpublisher.monetization.onetimeproducts.purchaseOptions.batchUpdateStates",
                  "request": {
                    "$ref": "BatchUpdatePurchaseOptionStatesRequest"
                  },
                  "response": {
                    "$ref": "BatchUpdatePurchaseOptionStatesResponse"
                  },
                  "path": "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions:batchUpdateStates",
                  "parameterOrder": [
                    "packageName",
                    "productId"
                  ],
                  "httpMethod": "POST",
                  "description": "Activates or deactivates purchase options across one or multiple one-time products."
                },
                "batchDelete": {
                  "flatPath": "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions:batchDelete",
                  "parameters": {
                    "packageName": {
                      "location": "path",
                      "type": "string",
                      "description": "Required. The parent app (package name) of the purchase options to delete.",
                      "required": true
                    },
                    "productId": {
                      "description": "Required. The product ID of the parent one-time product, if all purchase options to delete belong to the same one-time product. If this batch delete spans multiple one-time products, set this field to \"-\".",
                      "required": true,
                      "type": "string",
                      "location": "path"
                    }
                  },
                  "id": "androidpublisher.monetization.onetimeproducts.purchaseOptions.batchDelete",
                  "path": "androidpublisher/v3/applications/{packageName}/oneTimeProducts/{productId}/purchaseOptions:batchDelete",
                  "description": "Deletes purchase options across one or multiple one-time products. By default this operation will fail if there are any existing offers under the deleted purchase options. Use the force parameter to override the default behavior.",
                  "request": {
                    "$ref": "BatchDeletePurchaseOptionsRequest"
                  },
                  "scopes": [
                    "https://www.googleapis.com/auth/androidpublisher"
                  ],
                  "parameterOrder": [
                    "packageName",
                    "productId"
                  ],
                  "httpMethod": "POST"
                }
              }
            }
          }
        }
      },
      "methods": {
        "convertRegionPrices": {
          "id": "androidpublisher.monetization.convertRegionPrices",
          "path": "androidpublisher/v3/applications/{packageName}/pricing:convertRegionPrices",
          "response": {
            "$ref": "ConvertRegionPricesResponse"
          },
          "httpMethod": "POST",
          "request": {
            "$ref": "ConvertRegionPricesRequest"
          },
          "flatPath": "androidpublisher/v3/applications/{packageName}/pricing:convertRegionPrices",
          "parameters": {
            "packageName": {
              "description": "Required. The app package name.",
              "type": "string",
              "location": "path",
              "required": true
            }
          },
          "description": "Calculates the region prices, using today's exchange rate and country-specific pricing patterns, based on the price in the request for a set of regions.",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "parameterOrder": [
            "packageName"
          ]
        }
      }
    },
    "apprecovery": {
      "methods": {
        "create": {
          "parameterOrder": [
            "packageName"
          ],
          "response": {
            "$ref": "AppRecoveryAction"
          },
          "id": "androidpublisher.apprecovery.create",
          "description": "Create an app recovery action with recovery status as DRAFT. Note that this action does not execute the recovery action.",
          "request": {
            "$ref": "CreateDraftAppRecoveryRequest"
          },
          "httpMethod": "POST",
          "path": "androidpublisher/v3/applications/{packageName}/appRecoveries",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "parameters": {
            "packageName": {
              "location": "path",
              "type": "string",
              "description": "Required. Package name of the app on which recovery action is performed.",
              "required": true
            }
          },
          "flatPath": "androidpublisher/v3/applications/{packageName}/appRecoveries"
        },
        "deploy": {
          "flatPath": "androidpublisher/v3/applications/{packageName}/appRecoveries/{appRecoveryId}:deploy",
          "request": {
            "$ref": "DeployAppRecoveryRequest"
          },
          "path": "androidpublisher/v3/applications/{packageName}/appRecoveries/{appRecoveryId}:deploy",
          "parameterOrder": [
            "packageName",
            "appRecoveryId"
          ],
          "httpMethod": "POST",
          "description": "Deploy an already created app recovery action with recovery status DRAFT. Note that this action activates the recovery action for all targeted users and changes its status to ACTIVE.",
          "parameters": {
            "appRecoveryId": {
              "location": "path",
              "format": "int64",
              "description": "Required. ID corresponding to the app recovery action to deploy.",
              "required": true,
              "type": "string"
            },
            "packageName": {
              "required": true,
              "description": "Required. Package name of the app for which recovery action is deployed.",
              "type": "string",
              "location": "path"
            }
          },
          "id": "androidpublisher.apprecovery.deploy",
          "response": {
            "$ref": "DeployAppRecoveryResponse"
          },
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ]
        },
        "addTargeting": {
          "parameters": {
            "packageName": {
              "required": true,
              "type": "string",
              "description": "Required. Package name of the app for which recovery action is to be updated.",
              "location": "path"
            },
            "appRecoveryId": {
              "description": "Required. ID corresponding to the app recovery action.",
              "location": "path",
              "type": "string",
              "format": "int64",
              "required": true
            }
          },
          "description": "Incrementally update targeting for a recovery action. Note that only the criteria selected during the creation of recovery action can be expanded.",
          "flatPath": "androidpublisher/v3/applications/{packageName}/appRecoveries/{appRecoveryId}:addTargeting",
          "request": {
            "$ref": "AddTargetingRequest"
          },
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "response": {
            "$ref": "AddTargetingResponse"
          },
          "path": "androidpublisher/v3/applications/{packageName}/appRecoveries/{appRecoveryId}:addTargeting",
          "httpMethod": "POST",
          "id": "androidpublisher.apprecovery.addTargeting",
          "parameterOrder": [
            "packageName",
            "appRecoveryId"
          ]
        },
        "list": {
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "parameters": {
            "packageName": {
              "location": "path",
              "required": true,
              "type": "string",
              "description": "Required. Package name of the app for which list of recovery actions is requested."
            },
            "versionCode": {
              "format": "int64",
              "location": "query",
              "type": "string",
              "description": "Required. Version code targeted by the list of recovery actions."
            }
          },
          "response": {
            "$ref": "ListAppRecoveriesResponse"
          },
          "description": "List all app recovery action resources associated with a particular package name and app version.",
          "id": "androidpublisher.apprecovery.list",
          "parameterOrder": [
            "packageName"
          ],
          "path": "androidpublisher/v3/applications/{packageName}/appRecoveries",
          "httpMethod": "GET",
          "flatPath": "androidpublisher/v3/applications/{packageName}/appRecoveries"
        },
        "cancel": {
          "path": "androidpublisher/v3/applications/{packageName}/appRecoveries/{appRecoveryId}:cancel",
          "httpMethod": "POST",
          "flatPath": "androidpublisher/v3/applications/{packageName}/appRecoveries/{appRecoveryId}:cancel",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "request": {
            "$ref": "CancelAppRecoveryRequest"
          },
          "parameterOrder": [
            "packageName",
            "appRecoveryId"
          ],
          "id": "androidpublisher.apprecovery.cancel",
          "parameters": {
            "packageName": {
              "description": "Required. Package name of the app for which recovery action cancellation is requested.",
              "location": "path",
              "required": true,
              "type": "string"
            },
            "appRecoveryId": {
              "required": true,
              "type": "string",
              "location": "path",
              "description": "Required. ID corresponding to the app recovery action.",
              "format": "int64"
            }
          },
          "response": {
            "$ref": "CancelAppRecoveryResponse"
          },
          "description": "Cancel an already executing app recovery action. Note that this action changes status of the recovery action to CANCELED."
        }
      }
    },
    "internalappsharingartifacts": {
      "methods": {
        "uploadbundle": {
          "id": "androidpublisher.internalappsharingartifacts.uploadbundle",
          "httpMethod": "POST",
          "flatPath": "androidpublisher/v3/applications/internalappsharing/{packageName}/artifacts/bundle",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "parameterOrder": [
            "packageName"
          ],
          "response": {
            "$ref": "InternalAppSharingArtifact"
          },
          "supportsMediaUpload": true,
          "parameters": {
            "packageName": {
              "type": "string",
              "location": "path",
              "description": "Package name of the app.",
              "required": true
            }
          },
          "path": "androidpublisher/v3/applications/internalappsharing/{packageName}/artifacts/bundle",
          "description": "Uploads an app bundle to internal app sharing. If you are using the Google API client libraries, please increase the timeout of the http request before calling this endpoint (a timeout of 2 minutes is recommended). See [Timeouts and Errors](https://developers.google.com/api-client-library/java/google-api-java-client/errors) for an example in java.",
          "mediaUpload": {
            "protocols": {
              "resumable": {
                "path": "/resumable/upload/androidpublisher/v3/applications/internalappsharing/{packageName}/artifacts/bundle",
                "multipart": true
              },
              "simple": {
                "path": "/upload/androidpublisher/v3/applications/internalappsharing/{packageName}/artifacts/bundle",
                "multipart": true
              }
            },
            "maxSize": "10737418240",
            "accept": [
              "application/octet-stream"
            ]
          }
        },
        "uploadapk": {
          "path": "androidpublisher/v3/applications/internalappsharing/{packageName}/artifacts/apk",
          "response": {
            "$ref": "InternalAppSharingArtifact"
          },
          "supportsMediaUpload": true,
          "httpMethod": "POST",
          "id": "androidpublisher.internalappsharingartifacts.uploadapk",
          "parameters": {
            "packageName": {
              "description": "Package name of the app.",
              "required": true,
              "type": "string",
              "location": "path"
            }
          },
          "mediaUpload": {
            "protocols": {
              "simple": {
                "multipart": true,
                "path": "/upload/androidpublisher/v3/applications/internalappsharing/{packageName}/artifacts/apk"
              },
              "resumable": {
                "multipart": true,
                "path": "/resumable/upload/androidpublisher/v3/applications/internalappsharing/{packageName}/artifacts/apk"
              }
            },
            "accept": [
              "application/octet-stream",
              "application/vnd.android.package-archive"
            ],
            "maxSize": "1073741824"
          },
          "flatPath": "androidpublisher/v3/applications/internalappsharing/{packageName}/artifacts/apk",
          "scopes": [
            "https://www.googleapis.com/auth/androidpublisher"
          ],
          "parameterOrder": [
            "packageName"
          ],
          "description": "Uploads an APK to internal app sharing. If you are using the Google API client libraries, please increase the timeout of the http request before calling this endpoint (a timeout of 2 minutes is recommended). See [Timeouts and Errors](https://developers.google.com/api-client-library/java/google-api-java-client/errors) for an example in java."
        }
      }
    },
    "purchases": {
      "resources": {
        "productsv2": {
          "methods": {
            "getproductpurchasev2": {
              "parameters": {
                "packageName": {
                  "description": "The package name of the application the inapp product was sold in (for example, 'com.some.thing').",
                  "location": "path",
                  "type": "string",
                  "required": true
                },
                "token": {
                  "type": "string",
                  "required": true,
                  "description": "The token provided to the user's device when the inapp product was purchased.",
                  "location": "path"
                }
              },
              "path": "androidpublisher/v3/applications/{packageName}/purchases/productsv2/tokens/{token}",
              "response": {
                "$ref": "ProductPurchaseV2"
              },
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "parameterOrder": [
                "packageName",
                "token"
              ],
              "description": "Checks the purchase and consumption status of an inapp item.",
              "httpMethod": "GET",
              "flatPath": "androidpublisher/v3/applications/{packageName}/purchases/productsv2/tokens/{token}",
              "id": "androidpublisher.purchases.productsv2.getproductpurchasev2"
            }
          }
        },
        "subscriptionsv2": {
          "methods": {
            "revoke": {
              "request": {
                "$ref": "RevokeSubscriptionPurchaseRequest"
              },
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "description": "Revoke a subscription purchase for the user.",
              "parameters": {
                "packageName": {
                  "required": true,
                  "description": "Required. The package of the application for which this subscription was purchased (for example, 'com.some.thing').",
                  "type": "string",
                  "location": "path"
                },
                "token": {
                  "location": "path",
                  "type": "string",
                  "description": "Required. The token provided to the user's device when the subscription was purchased.",
                  "required": true
                }
              },
              "id": "androidpublisher.purchases.subscriptionsv2.revoke",
              "flatPath": "androidpublisher/v3/applications/{packageName}/purchases/subscriptionsv2/tokens/{token}:revoke",
              "path": "androidpublisher/v3/applications/{packageName}/purchases/subscriptionsv2/tokens/{token}:revoke",
              "response": {
                "$ref": "RevokeSubscriptionPurchaseResponse"
              },
              "httpMethod": "POST",
              "parameterOrder": [
                "packageName",
                "token"
              ]
            },
            "get": {
              "response": {
                "$ref": "SubscriptionPurchaseV2"
              },
              "id": "androidpublisher.purchases.subscriptionsv2.get",
              "path": "androidpublisher/v3/applications/{packageName}/purchases/subscriptionsv2/tokens/{token}",
              "parameters": {
                "packageName": {
                  "description": "The package of the application for which this subscription was purchased (for example, 'com.some.thing').",
                  "location": "path",
                  "type": "string",
                  "required": true
                },
                "token": {
                  "type": "string",
                  "description": "Required. The token provided to the user's device when the subscription was purchased.",
                  "required": true,
                  "location": "path"
                }
              },
              "description": "Get metadata about a subscription",
              "httpMethod": "GET",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "flatPath": "androidpublisher/v3/applications/{packageName}/purchases/subscriptionsv2/tokens/{token}",
              "parameterOrder": [
                "packageName",
                "token"
              ]
            },
            "defer": {
              "id": "androidpublisher.purchases.subscriptionsv2.defer",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "httpMethod": "POST",
              "description": "Defers the renewal of a subscription.",
              "flatPath": "androidpublisher/v3/applications/{packageName}/purchases/subscriptionsv2/tokens/{token}:defer",
              "response": {
                "$ref": "DeferSubscriptionPurchaseResponse"
              },
              "parameterOrder": [
                "packageName",
                "token"
              ],
              "path": "androidpublisher/v3/applications/{packageName}/purchases/subscriptionsv2/tokens/{token}:defer",
              "parameters": {
                "packageName": {
                  "description": "Required. The package of the application for which this subscription was purchased (for example, 'com.some.thing').",
                  "location": "path",
                  "type": "string",
                  "required": true
                },
                "token": {
                  "required": true,
                  "description": "Required. The token provided to the user's device when the subscription was purchased.",
                  "type": "string",
                  "location": "path"
                }
              },
              "request": {
                "$ref": "DeferSubscriptionPurchaseRequest"
              }
            },
            "cancel": {
              "parameterOrder": [
                "packageName",
                "token"
              ],
              "path": "androidpublisher/v3/applications/{packageName}/purchases/subscriptionsv2/tokens/{token}:cancel",
              "response": {
                "$ref": "CancelSubscriptionPurchaseResponse"
              },
              "httpMethod": "POST",
              "id": "androidpublisher.purchases.subscriptionsv2.cancel",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "flatPath": "androidpublisher/v3/applications/{packageName}/purchases/subscriptionsv2/tokens/{token}:cancel",
              "parameters": {
                "token": {
                  "location": "path",
                  "description": "Required. The token provided to the user's device when the subscription was purchased.",
                  "type": "string",
                  "required": true
                },
                "packageName": {
                  "type": "string",
                  "required": true,
                  "location": "path",
                  "description": "Required. The package of the application for which this subscription was purchased (for example, 'com.some.thing')."
                }
              },
              "request": {
                "$ref": "CancelSubscriptionPurchaseRequest"
              },
              "description": "Cancel a subscription purchase for the user."
            },
            "cancelplantransition": {
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "httpMethod": "POST",
              "description": "Cancel a plan transition for a subscription.",
              "id": "androidpublisher.purchases.subscriptionsv2.cancelplantransition",
              "response": {
                "$ref": "CancelPlanTransitionResponse"
              },
              "path": "androidpublisher/v3/applications/{packageName}/purchases/subscriptionsv2/tokens/{token}:cancelPlanTransition",
              "parameterOrder": [
                "packageName",
                "token"
              ],
              "flatPath": "androidpublisher/v3/applications/{packageName}/purchases/subscriptionsv2/tokens/{token}:cancelPlanTransition",
              "request": {
                "$ref": "CancelPlanTransitionRequest"
              },
              "parameters": {
                "token": {
                  "location": "path",
                  "description": "Required. The token provided to the user's device when the subscription was purchased.",
                  "required": true,
                  "type": "string"
                },
                "packageName": {
                  "required": true,
                  "type": "string",
                  "location": "path",
                  "description": "Required. The package of the application for which this subscription was purchased (for example, 'com.some.thing')."
                }
              }
            },
            "scheduleplantransition": {
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "description": "Schedule a plan transition for a subscription.",
              "path": "androidpublisher/v3/applications/{packageName}/purchases/subscriptionsv2/tokens/{token}:schedulePlanTransition",
              "httpMethod": "POST",
              "response": {
                "$ref": "SchedulePlanTransitionResponse"
              },
              "flatPath": "androidpublisher/v3/applications/{packageName}/purchases/subscriptionsv2/tokens/{token}:schedulePlanTransition",
              "parameters": {
                "token": {
                  "description": "Required. The token provided to the user's device when the subscription was purchased.",
                  "required": true,
                  "type": "string",
                  "location": "path"
                },
                "packageName": {
                  "required": true,
                  "description": "Required. The package of the application for which this subscription was purchased (for example, 'com.some.thing').",
                  "type": "string",
                  "location": "path"
                }
              },
              "request": {
                "$ref": "SchedulePlanTransitionRequest"
              },
              "parameterOrder": [
                "packageName",
                "token"
              ],
              "id": "androidpublisher.purchases.subscriptionsv2.scheduleplantransition"
            }
          }
        },
        "voidedpurchases": {
          "methods": {
            "list": {
              "id": "androidpublisher.purchases.voidedpurchases.list",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "path": "androidpublisher/v3/applications/{packageName}/purchases/voidedpurchases",
              "parameters": {
                "startTime": {
                  "description": "The time, in milliseconds since the Epoch, of the oldest voided purchase that you want to see in the response. The value of this parameter cannot be older than 30 days and is ignored if a pagination token is set. Default value is current time minus 30 days. Note: This filter is applied on the time at which the record is seen as voided by our systems and not the actual voided time returned in the response.",
                  "format": "int64",
                  "type": "string",
                  "location": "query"
                },
                "endTime": {
                  "location": "query",
                  "type": "string",
                  "format": "int64",
                  "description": "The time, in milliseconds since the Epoch, of the newest voided purchase that you want to see in the response. The value of this parameter cannot be greater than the current time and is ignored if a pagination token is set. Default value is current time. Note: This filter is applied on the time at which the record is seen as voided by our systems and not the actual voided time returned in the response."
                },
                "startIndex": {
                  "description": "Defines the index of the first element to return. This can only be used if indexed paging is enabled.",
                  "format": "uint32",
                  "location": "query",
                  "type": "integer"
                },
                "token": {
                  "location": "query",
                  "description": "Defines the token of the page to return, usually taken from TokenPagination. This can only be used if token paging is enabled.",
                  "type": "string"
                },
                "packageName": {
                  "required": true,
                  "type": "string",
                  "location": "path",
                  "description": "The package name of the application for which voided purchases need to be returned (for example, 'com.some.thing')."
                },
                "maxResults": {
                  "location": "query",
                  "description": "Defines how many results the list operation should return. The default number depends on the resource collection.",
                  "type": "integer",
                  "format": "uint32"
                },
                "includeQuantityBasedPartialRefund": {
                  "type": "boolean",
                  "location": "query",
                  "description": "Optional. Whether to include voided purchases of quantity-based partial refunds, which are applicable only to multi-quantity purchases. If true, additional voided purchases may be returned with voidedQuantity that indicates the refund quantity of a quantity-based partial refund. The default value is false."
                },
                "type": {
                  "type": "integer",
                  "description": "The type of voided purchases that you want to see in the response. Possible values are: 0. Only voided in-app product purchases will be returned in the response. This is the default value. 1. Both voided in-app purchases and voided subscription purchases will be returned in the response. Note: Before requesting to receive voided subscription purchases, you must switch to use orderId in the response which uniquely identifies one-time purchases and subscriptions. Otherwise, you will receive multiple subscription orders with the same PurchaseToken, because subscription renewal orders share the same PurchaseToken.",
                  "format": "int32",
                  "location": "query"
                }
              },
              "flatPath": "androidpublisher/v3/applications/{packageName}/purchases/voidedpurchases",
              "response": {
                "$ref": "VoidedPurchasesListResponse"
              },
              "httpMethod": "GET",
              "description": "Lists the purchases that were canceled, refunded or charged-back.",
              "parameterOrder": [
                "packageName"
              ]
            }
          }
        },
        "subscriptions": {
          "methods": {
            "acknowledge": {
              "flatPath": "androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:acknowledge",
              "parameters": {
                "packageName": {
                  "required": true,
                  "type": "string",
                  "description": "The package name of the application for which this subscription was purchased (for example, 'com.some.thing').",
                  "location": "path"
                },
                "subscriptionId": {
                  "description": "Note: Since May 21, 2025, subscription_id is not required, and not recommended for subscription with add-ons. The purchased subscription ID (for example, 'monthly001').",
                  "location": "path",
                  "type": "string",
                  "required": true
                },
                "token": {
                  "location": "path",
                  "required": true,
                  "type": "string",
                  "description": "The token provided to the user's device when the subscription was purchased."
                }
              },
              "id": "androidpublisher.purchases.subscriptions.acknowledge",
              "request": {
                "$ref": "SubscriptionPurchasesAcknowledgeRequest"
              },
              "description": "Acknowledges a subscription purchase.",
              "path": "androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:acknowledge",
              "httpMethod": "POST",
              "parameterOrder": [
                "packageName",
                "subscriptionId",
                "token"
              ],
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ]
            },
            "cancel": {
              "parameters": {
                "subscriptionId": {
                  "location": "path",
                  "type": "string",
                  "description": "Note: Since May 21, 2025, subscription_id is not required, and not recommended for subscription with add-ons. The purchased subscription ID (for example, 'monthly001').",
                  "required": true
                },
                "token": {
                  "description": "The token provided to the user's device when the subscription was purchased.",
                  "required": true,
                  "location": "path",
                  "type": "string"
                },
                "packageName": {
                  "required": true,
                  "type": "string",
                  "description": "The package name of the application for which this subscription was purchased (for example, 'com.some.thing').",
                  "location": "path"
                }
              },
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "deprecated": true,
              "description": "Deprecated: Use purchases.subscriptionsv2.cancel instead. Cancels a user's subscription purchase. The subscription remains valid until its expiration time. Newer version is available at purchases.subscriptionsv2.cancel for better client library support.",
              "path": "androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:cancel",
              "id": "androidpublisher.purchases.subscriptions.cancel",
              "flatPath": "androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:cancel",
              "parameterOrder": [
                "packageName",
                "subscriptionId",
                "token"
              ],
              "httpMethod": "POST"
            },
            "defer": {
              "parameters": {
                "subscriptionId": {
                  "location": "path",
                  "description": "The purchased subscription ID (for example, 'monthly001').",
                  "required": true,
                  "type": "string"
                },
                "token": {
                  "location": "path",
                  "description": "The token provided to the user's device when the subscription was purchased.",
                  "required": true,
                  "type": "string"
                },
                "packageName": {
                  "required": true,
                  "type": "string",
                  "location": "path",
                  "description": "The package name of the application for which this subscription was purchased (for example, 'com.some.thing')."
                }
              },
              "flatPath": "androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:defer",
              "deprecated": true,
              "parameterOrder": [
                "packageName",
                "subscriptionId",
                "token"
              ],
              "description": "Deprecated: Use purchases.subscriptionsv2.defer instead. Defers a user's subscription purchase until a specified future expiration time.",
              "request": {
                "$ref": "SubscriptionPurchasesDeferRequest"
              },
              "id": "androidpublisher.purchases.subscriptions.defer",
              "httpMethod": "POST",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "response": {
                "$ref": "SubscriptionPurchasesDeferResponse"
              },
              "path": "androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}:defer"
            }
          }
        },
        "products": {
          "methods": {
            "acknowledge": {
              "request": {
                "$ref": "ProductPurchasesAcknowledgeRequest"
              },
              "flatPath": "androidpublisher/v3/applications/{packageName}/purchases/products/{productId}/tokens/{token}:acknowledge",
              "parameters": {
                "productId": {
                  "location": "path",
                  "type": "string",
                  "description": "The inapp product SKU (for example, 'com.some.thing.inapp1').",
                  "required": true
                },
                "packageName": {
                  "description": "The package name of the application the inapp product was sold in (for example, 'com.some.thing').",
                  "location": "path",
                  "type": "string",
                  "required": true
                },
                "token": {
                  "type": "string",
                  "description": "The token provided to the user's device when the inapp product was purchased.",
                  "location": "path",
                  "required": true
                }
              },
              "parameterOrder": [
                "packageName",
                "productId",
                "token"
              ],
              "description": "Acknowledges a purchase of an inapp item.",
              "path": "androidpublisher/v3/applications/{packageName}/purchases/products/{productId}/tokens/{token}:acknowledge",
              "httpMethod": "POST",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "id": "androidpublisher.purchases.products.acknowledge"
            },
            "consume": {
              "parameters": {
                "packageName": {
                  "description": "The package name of the application the inapp product was sold in (for example, 'com.some.thing').",
                  "location": "path",
                  "required": true,
                  "type": "string"
                },
                "token": {
                  "required": true,
                  "type": "string",
                  "description": "The token provided to the user's device when the inapp product was purchased.",
                  "location": "path"
                },
                "productId": {
                  "description": "The inapp product SKU (for example, 'com.some.thing.inapp1').",
                  "required": true,
                  "type": "string",
                  "location": "path"
                }
              },
              "flatPath": "androidpublisher/v3/applications/{packageName}/purchases/products/{productId}/tokens/{token}:consume",
              "path": "androidpublisher/v3/applications/{packageName}/purchases/products/{productId}/tokens/{token}:consume",
              "description": "Consumes a purchase for an inapp item.",
              "httpMethod": "POST",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "parameterOrder": [
                "packageName",
                "productId",
                "token"
              ],
              "id": "androidpublisher.purchases.products.consume"
            },
            "get": {
              "path": "androidpublisher/v3/applications/{packageName}/purchases/products/{productId}/tokens/{token}",
              "response": {
                "$ref": "ProductPurchase"
              },
              "parameters": {
                "productId": {
                  "location": "path",
                  "description": "The inapp product SKU (for example, 'com.some.thing.inapp1').",
                  "type": "string",
                  "required": true
                },
                "packageName": {
                  "location": "path",
                  "required": true,
                  "type": "string",
                  "description": "The package name of the application the inapp product was sold in (for example, 'com.some.thing')."
                },
                "token": {
                  "location": "path",
                  "type": "string",
                  "required": true,
                  "description": "The token provided to the user's device when the inapp product was purchased."
                }
              },
              "description": "Checks the purchase and consumption status of an inapp item.",
              "parameterOrder": [
                "packageName",
                "productId",
                "token"
              ],
              "httpMethod": "GET",
              "id": "androidpublisher.purchases.products.get",
              "scopes": [
                "https://www.googleapis.com/auth/androidpublisher"
              ],
              "flatPath": "androidpublisher/v3/applications/{packageName}/purchases/products/{productId}/tokens/{token}"
            }
          }
        }
      }
    }
  }
}
