"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.",
"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. Overrides userIp if both are provided.",
"description":"Deletes an edit for an app. Creating a new edit will automatically delete any of your previous edits so this method need only be called if you want to preemptively abandon an edit.",
"httpMethod":"DELETE",
"id":"androidpublisher.edits.delete",
"parameterOrder":[
"packageName",
"editId"
],
"parameters":{
"editId":{
"description":"Unique identifier for this edit.",
"location":"path",
"required":true,
"type":"string"
},
"packageName":{
"description":"Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
"description":"Returns information about the edit specified. Calls will fail if the edit is no long active (e.g. has been deleted, superseded or expired).",
"httpMethod":"GET",
"id":"androidpublisher.edits.get",
"parameterOrder":[
"packageName",
"editId"
],
"parameters":{
"editId":{
"description":"Unique identifier for this edit.",
"location":"path",
"required":true,
"type":"string"
},
"packageName":{
"description":"Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
"description":"Deletes the APK-specific localized listing for a specified APK and language code.",
"httpMethod":"DELETE",
"id":"androidpublisher.edits.apklistings.delete",
"parameterOrder":[
"packageName",
"editId",
"apkVersionCode",
"language"
],
"parameters":{
"apkVersionCode":{
"description":"The APK version code whose APK-specific listings should be read or modified.",
"format":"int32",
"location":"path",
"required":true,
"type":"integer"
},
"editId":{
"description":"Unique identifier for this edit.",
"location":"path",
"required":true,
"type":"string"
},
"language":{
"description":"The language code (a BCP-47 language tag) of the APK-specific localized listing to read or modify. For example, to select Austrian German, pass \"de-AT\".",
"location":"path",
"required":true,
"type":"string"
},
"packageName":{
"description":"Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
"description":"Fetches the APK-specific localized listing for a specified APK and language code.",
"httpMethod":"GET",
"id":"androidpublisher.edits.apklistings.get",
"parameterOrder":[
"packageName",
"editId",
"apkVersionCode",
"language"
],
"parameters":{
"apkVersionCode":{
"description":"The APK version code whose APK-specific listings should be read or modified.",
"format":"int32",
"location":"path",
"required":true,
"type":"integer"
},
"editId":{
"description":"Unique identifier for this edit.",
"location":"path",
"required":true,
"type":"string"
},
"language":{
"description":"The language code (a BCP-47 language tag) of the APK-specific localized listing to read or modify. For example, to select Austrian German, pass \"de-AT\".",
"location":"path",
"required":true,
"type":"string"
},
"packageName":{
"description":"Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
"description":"Updates or creates the APK-specific localized listing for a specified APK and language code. This method supports patch semantics.",
"httpMethod":"PATCH",
"id":"androidpublisher.edits.apklistings.patch",
"parameterOrder":[
"packageName",
"editId",
"apkVersionCode",
"language"
],
"parameters":{
"apkVersionCode":{
"description":"The APK version code whose APK-specific listings should be read or modified.",
"format":"int32",
"location":"path",
"required":true,
"type":"integer"
},
"editId":{
"description":"Unique identifier for this edit.",
"location":"path",
"required":true,
"type":"string"
},
"language":{
"description":"The language code (a BCP-47 language tag) of the APK-specific localized listing to read or modify. For example, to select Austrian German, pass \"de-AT\".",
"location":"path",
"required":true,
"type":"string"
},
"packageName":{
"description":"Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
"description":"Updates or creates the APK-specific localized listing for a specified APK and language code.",
"httpMethod":"PUT",
"id":"androidpublisher.edits.apklistings.update",
"parameterOrder":[
"packageName",
"editId",
"apkVersionCode",
"language"
],
"parameters":{
"apkVersionCode":{
"description":"The APK version code whose APK-specific listings should be read or modified.",
"format":"int32",
"location":"path",
"required":true,
"type":"integer"
},
"editId":{
"description":"Unique identifier for this edit.",
"location":"path",
"required":true,
"type":"string"
},
"language":{
"description":"The language code (a BCP-47 language tag) of the APK-specific localized listing to read or modify. For example, to select Austrian German, pass \"de-AT\".",
"location":"path",
"required":true,
"type":"string"
},
"packageName":{
"description":"Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
"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 enterprises using Google Play for Work whose application is configured to restrict distribution to the enterprise domain.",
"description":"Updates the APK's Expansion File configuration to reference another APK's Expansion Files. To add a new Expansion File use the Upload method. This method supports patch semantics.",
"description":"Updates the APK's Expansion File configuration to reference another APK's Expansion Files. To add a new Expansion File use the Upload method.",
"description":"Deletes the image (specified by id) from the edit.",
"httpMethod":"DELETE",
"id":"androidpublisher.edits.images.delete",
"parameterOrder":[
"packageName",
"editId",
"language",
"imageType",
"imageId"
],
"parameters":{
"editId":{
"description":"Unique identifier for this edit.",
"location":"path",
"required":true,
"type":"string"
},
"imageId":{
"description":"Unique identifier an image within the set of images attached to this edit.",
"location":"path",
"required":true,
"type":"string"
},
"imageType":{
"enum":[
"featureGraphic",
"icon",
"phoneScreenshots",
"promoGraphic",
"sevenInchScreenshots",
"tenInchScreenshots",
"tvBanner",
"tvScreenshots",
"wearScreenshots"
],
"enumDescriptions":[
"",
"",
"",
"",
"",
"",
"",
"",
""
],
"location":"path",
"required":true,
"type":"string"
},
"language":{
"description":"The language code (a BCP-47 language tag) of the localized listing whose images are to read or modified. For example, to select Austrian German, pass \"de-AT\".",
"location":"path",
"required":true,
"type":"string"
},
"packageName":{
"description":"Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
"description":"Deletes all images for the specified language and image type.",
"httpMethod":"DELETE",
"id":"androidpublisher.edits.images.deleteall",
"parameterOrder":[
"packageName",
"editId",
"language",
"imageType"
],
"parameters":{
"editId":{
"description":"Unique identifier for this edit.",
"location":"path",
"required":true,
"type":"string"
},
"imageType":{
"enum":[
"featureGraphic",
"icon",
"phoneScreenshots",
"promoGraphic",
"sevenInchScreenshots",
"tenInchScreenshots",
"tvBanner",
"tvScreenshots",
"wearScreenshots"
],
"enumDescriptions":[
"",
"",
"",
"",
"",
"",
"",
"",
""
],
"location":"path",
"required":true,
"type":"string"
},
"language":{
"description":"The language code (a BCP-47 language tag) of the localized listing whose images are to read or modified. For example, to select Austrian German, pass \"de-AT\".",
"location":"path",
"required":true,
"type":"string"
},
"packageName":{
"description":"Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
"description":"Lists all images for the specified language and image type.",
"httpMethod":"GET",
"id":"androidpublisher.edits.images.list",
"parameterOrder":[
"packageName",
"editId",
"language",
"imageType"
],
"parameters":{
"editId":{
"description":"Unique identifier for this edit.",
"location":"path",
"required":true,
"type":"string"
},
"imageType":{
"enum":[
"featureGraphic",
"icon",
"phoneScreenshots",
"promoGraphic",
"sevenInchScreenshots",
"tenInchScreenshots",
"tvBanner",
"tvScreenshots",
"wearScreenshots"
],
"enumDescriptions":[
"",
"",
"",
"",
"",
"",
"",
"",
""
],
"location":"path",
"required":true,
"type":"string"
},
"language":{
"description":"The language code (a BCP-47 language tag) of the localized listing whose images are to read or modified. For example, to select Austrian German, pass \"de-AT\".",
"location":"path",
"required":true,
"type":"string"
},
"packageName":{
"description":"Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
"description":"The language code (a BCP-47 language tag) of the localized listing whose images are to read or modified. For example, to select Austrian German, pass \"de-AT\".",
"location":"path",
"required":true,
"type":"string"
},
"packageName":{
"description":"Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
"description":"Deletes the specified localized store listing from an edit.",
"httpMethod":"DELETE",
"id":"androidpublisher.edits.listings.delete",
"parameterOrder":[
"packageName",
"editId",
"language"
],
"parameters":{
"editId":{
"description":"Unique identifier for this edit.",
"location":"path",
"required":true,
"type":"string"
},
"language":{
"description":"The language code (a BCP-47 language tag) of the localized listing to read or modify. For example, to select Austrian German, pass \"de-AT\".",
"location":"path",
"required":true,
"type":"string"
},
"packageName":{
"description":"Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
"description":"Fetches information about a localized store listing.",
"httpMethod":"GET",
"id":"androidpublisher.edits.listings.get",
"parameterOrder":[
"packageName",
"editId",
"language"
],
"parameters":{
"editId":{
"description":"Unique identifier for this edit.",
"location":"path",
"required":true,
"type":"string"
},
"language":{
"description":"The language code (a BCP-47 language tag) of the localized listing to read or modify. For example, to select Austrian German, pass \"de-AT\".",
"location":"path",
"required":true,
"type":"string"
},
"packageName":{
"description":"Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
"description":"Creates or updates a localized store listing. This method supports patch semantics.",
"httpMethod":"PATCH",
"id":"androidpublisher.edits.listings.patch",
"parameterOrder":[
"packageName",
"editId",
"language"
],
"parameters":{
"editId":{
"description":"Unique identifier for this edit.",
"location":"path",
"required":true,
"type":"string"
},
"language":{
"description":"The language code (a BCP-47 language tag) of the localized listing to read or modify. For example, to select Austrian German, pass \"de-AT\".",
"location":"path",
"required":true,
"type":"string"
},
"packageName":{
"description":"Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
"description":"Creates or updates a localized store listing.",
"httpMethod":"PUT",
"id":"androidpublisher.edits.listings.update",
"parameterOrder":[
"packageName",
"editId",
"language"
],
"parameters":{
"editId":{
"description":"Unique identifier for this edit.",
"location":"path",
"required":true,
"type":"string"
},
"language":{
"description":"The language code (a BCP-47 language tag) of the localized listing to read or modify. For example, to select Austrian German, pass \"de-AT\".",
"location":"path",
"required":true,
"type":"string"
},
"packageName":{
"description":"Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
"description":"Updates the track configuration for the specified track type. When halted, the rollout track cannot be updated without adding new APKs, and adding new APKs will cause it to resume. This method supports patch semantics.",
"httpMethod":"PATCH",
"id":"androidpublisher.edits.tracks.patch",
"parameterOrder":[
"packageName",
"editId",
"track"
],
"parameters":{
"editId":{
"description":"Unique identifier for this edit.",
"location":"path",
"required":true,
"type":"string"
},
"packageName":{
"description":"Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
"location":"path",
"required":true,
"type":"string"
},
"track":{
"description":"The track to read or modify. Acceptable values are: \"alpha\", \"beta\", \"production\", \"rollout\" or \"internal\".",
"description":"Updates the track configuration for the specified track type. When halted, the rollout track cannot be updated without adding new APKs, and adding new APKs will cause it to resume.",
"httpMethod":"PUT",
"id":"androidpublisher.edits.tracks.update",
"parameterOrder":[
"packageName",
"editId",
"track"
],
"parameters":{
"editId":{
"description":"Unique identifier for this edit.",
"location":"path",
"required":true,
"type":"string"
},
"packageName":{
"description":"Unique identifier for the Android app that is being updated; for example, \"com.spiffygame\".",
"location":"path",
"required":true,
"type":"string"
},
"track":{
"description":"The track to read or modify. Acceptable values are: \"alpha\", \"beta\", \"production\", \"rollout\" or \"internal\".",
"description":"Creates a new in-app product for an app.",
"httpMethod":"POST",
"id":"androidpublisher.inappproducts.insert",
"parameterOrder":[
"packageName"
],
"parameters":{
"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"
},
"packageName":{
"description":"Unique identifier for the Android app; for example, \"com.spiffygame\".",
"description":"Updates the details of an in-app product. This method supports patch semantics.",
"httpMethod":"PATCH",
"id":"androidpublisher.inappproducts.patch",
"parameterOrder":[
"packageName",
"sku"
],
"parameters":{
"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"
},
"packageName":{
"description":"Unique identifier for the Android app with the in-app product; for example, \"com.spiffygame\".",
"location":"path",
"required":true,
"type":"string"
},
"sku":{
"description":"Unique identifier for the in-app product.",
"description":"Updates the details of an in-app product.",
"httpMethod":"PUT",
"id":"androidpublisher.inappproducts.update",
"parameterOrder":[
"packageName",
"sku"
],
"parameters":{
"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"
},
"packageName":{
"description":"Unique identifier for the Android app with the in-app product; for example, \"com.spiffygame\".",
"location":"path",
"required":true,
"type":"string"
},
"sku":{
"description":"Unique identifier for the in-app product.",
"description":"Refunds and immediately revokes a user's subscription purchase. Access to the subscription will be terminated immediately and it will stop recurring.",
"description":"The time, in milliseconds since the Epoch, of the newest voided in-app product 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.",
"format":"int64",
"location":"query",
"type":"string"
},
"maxResults":{
"format":"uint32",
"location":"query",
"type":"integer"
},
"packageName":{
"description":"The package name of the application for which voided purchases need to be returned (for example, 'com.some.thing').",
"location":"path",
"required":true,
"type":"string"
},
"startIndex":{
"format":"uint32",
"location":"query",
"type":"integer"
},
"startTime":{
"description":"The time, in milliseconds since the Epoch, of the oldest voided in-app product 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.",
"description":"Represents an edit of an app. An edit allows clients to make multiple changes before committing them in one operation.",
"id":"AppEdit",
"properties":{
"expiryTimeSeconds":{
"description":"The time at which the edit will expire and will be no longer valid for use in any subsequent API calls (encoded as seconds since the Epoch).",
"type":"string"
},
"id":{
"description":"The ID of the edit that can be used in subsequent API calls.",
"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.",
"format":"int64",
"type":"string"
},
"referencesVersion":{
"description":"If set this APK's Expansion File references another APK's Expansion File. The file_size field will not be set.",
"description":"Defines an APK available for this application that is hosted externally and not uploaded to Google Play. This function is only available to enterprises who are using Google Play for Work, and whos application is restricted to the enterprise private channel",
"id":"ExternallyHostedApk",
"properties":{
"applicationLabel":{
"description":"The application label.",
"type":"string"
},
"certificateBase64s":{
"description":"A certificate (or array of certificates if a certificate-chain is used) used to signed this APK, represented as a base64 encoded byte array.",
"items":{
"type":"string"
},
"type":"array"
},
"externallyHostedUrl":{
"description":"The URL at which the APK is hosted. This must be an https URL.",
"type":"string"
},
"fileSha1Base64":{
"description":"The SHA1 checksum of this APK, represented as a base64 encoded byte array.",
"type":"string"
},
"fileSha256Base64":{
"description":"The SHA256 checksum of this APK, represented as a base64 encoded byte array.",
"type":"string"
},
"fileSize":{
"description":"The file size in bytes of this APK.",
"format":"int64",
"type":"string"
},
"iconBase64":{
"description":"The icon image from the APK, as a base64 encoded byte array.",
"type":"string"
},
"maximumSdk":{
"description":"The maximum SDK supported by this APK (optional).",
"format":"int32",
"type":"integer"
},
"minimumSdk":{
"description":"The minimum SDK targeted by this APK.",
"format":"int32",
"type":"integer"
},
"nativeCodes":{
"description":"The native code environments supported by this APK (optional).",
"description":"The default language of the localized data, as defined by BCP 47. e.g. \"en-US\", \"en-GB\".",
"type":"string"
},
"defaultPrice":{
"$ref":"Price",
"description":"Default price cannot be zero. In-app products can never be free. Default price is always in the developer's Checkout merchant currency."
},
"listings":{
"additionalProperties":{
"$ref":"InAppProductListing",
"description":"The language of the localized data, as defined by BCP 47. i.e.: \"en-US\", \"en-GB\"."
},
"description":"List of localized title and description data.",
"description":"The package name of the parent app.",
"type":"string"
},
"prices":{
"additionalProperties":{
"$ref":"Price",
"description":"Region code, as defined by ISO 3166-2."
},
"description":"Prices per buyer region. None of these prices should be zero. In-app products can never be free.",
"type":"object"
},
"purchaseType":{
"description":"Purchase type enum value. Unmodifiable after creation.",
"type":"string"
},
"season":{
"$ref":"Season",
"description":"Definition of a season for a seasonal subscription. Can be defined only for yearly subscriptions."
},
"sku":{
"description":"The stock-keeping-unit (SKU) of the product, unique within an app.",
"type":"string"
},
"status":{
"type":"string"
},
"subscriptionPeriod":{
"description":"Subscription period, specified in ISO 8601 format. Acceptable values are \"P1W\" (one week), \"P1M\" (one month), \"P3M\" (three months), \"P6M\" (six months), and \"P1Y\" (one year).",
"type":"string"
},
"trialPeriod":{
"description":"Trial period, specified in ISO 8601 format. Acceptable values are anything between \"P7D\" (seven days) and \"P999D\" (999 days). Seasonal subscriptions cannot have a trial period.",
"description":"A ProductPurchase resource indicates the status of a user's inapp product purchase.",
"id":"ProductPurchase",
"properties":{
"consumptionState":{
"description":"The consumption state of the inapp product. Possible values are: \n- Yet to be consumed \n- Consumed",
"format":"int32",
"type":"integer"
},
"developerPayload":{
"description":"A developer-specified string that contains supplemental information about an order.",
"type":"string"
},
"kind":{
"default":"androidpublisher#productPurchase",
"description":"This kind represents an inappPurchase object in the androidpublisher service.",
"type":"string"
},
"orderId":{
"description":"The order id associated with the purchase of the inapp product.",
"type":"string"
},
"purchaseState":{
"description":"The purchase state of the order. Possible values are: \n- Purchased \n- Canceled",
"format":"int32",
"type":"integer"
},
"purchaseTimeMillis":{
"description":"The time the product was purchased, in milliseconds since the epoch (Jan 1, 1970).",
"format":"int64",
"type":"string"
},
"purchaseType":{
"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: \n- Test (i.e. purchased from a license testing account) \n- Promo (i.e. purchased using a promo code)",
"description":"Default price cannot be zero and must be less than the full subscription price. Default price is always in the developer's Checkout merchant currency. Targeted countries have their prices set automatically based on the default_price."
},
"start":{
"$ref":"MonthDay",
"description":"Defines the first day on which the price takes effect."
"description":"Inclusive end date of the recurrence period."
},
"prorations":{
"description":"Optionally present list of prorations for the season. Each proration is a one-off discounted entry into a subscription. Each proration contains the first date on which the discount is available and the new pricing information.",
"items":{
"$ref":"Prorate"
},
"type":"array"
},
"start":{
"$ref":"MonthDay",
"description":"Inclusive start date of the recurrence period."
"description":"A SubscriptionDeferralInfo contains the data needed to defer a subscription purchase to a future expiry time.",
"id":"SubscriptionDeferralInfo",
"properties":{
"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"
},
"expectedExpiryTimeMillis":{
"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.",
"description":"A SubscriptionPurchase resource indicates the status of a user's subscription purchase.",
"id":"SubscriptionPurchase",
"properties":{
"autoRenewing":{
"description":"Whether the subscription will automatically be renewed when it reaches its current expiry time.",
"type":"boolean"
},
"cancelReason":{
"description":"The reason why a subscription was canceled or is not auto-renewing. Possible values are: \n- User canceled the subscription \n- Subscription was canceled by the system, for example because of a billing problem \n- Subscription was replaced with a new subscription \n- Subscription was canceled by the developer",
"format":"int32",
"type":"integer"
},
"countryCode":{
"description":"ISO 3166-1 alpha-2 billing country/region code of the user at the time the subscription was granted.",
"type":"string"
},
"developerPayload":{
"description":"A developer-specified string that contains supplemental information about an order.",
"type":"string"
},
"emailAddress":{
"description":"The email address of the user when the subscription was purchased. Only present for purchases made with 'Subscribe with Google'.",
"type":"string"
},
"expiryTimeMillis":{
"description":"Time at which the subscription will expire, in milliseconds since the Epoch.",
"format":"int64",
"type":"string"
},
"familyName":{
"description":"The family name of the user when the subscription was purchased. Only present for purchases made with 'Subscribe with Google'.",
"type":"string"
},
"givenName":{
"description":"The given name of the user when the subscription was purchased. Only present for purchases made with 'Subscribe with Google'.",
"description":"This kind represents a subscriptionPurchase object in the androidpublisher service.",
"type":"string"
},
"linkedPurchaseToken":{
"description":"The purchase token of the originating purchase if this subscription is one of the following: \n- Re-signup of a canceled but non-lapsed subscription \n- Upgrade/downgrade from a previous subscription For example, suppose a user originally signs up and you receive purchase token X, then the user cancels and goes through the resignup flow (before their subscription lapses) and you receive purchase token Y, and finally the user upgrades their subscription and you receive purchase token Z. If you call this API with purchase token Z, this field will be set to Y. If you call this API with purchase token Y, this field will be set to X. If you call this API with purchase token X, this field will not be set.",
"type":"string"
},
"orderId":{
"description":"The order id of the latest recurring order associated with the purchase of the subscription.",
"type":"string"
},
"paymentState":{
"description":"The payment state of the subscription. Possible values are: \n- Payment pending \n- Payment received \n- Free trial",
"format":"int32",
"type":"integer"
},
"priceAmountMicros":{
"description":"Price of the subscription, not including tax. Price is expressed in micro-units, where 1,000,000 micro-units represents one unit of the currency. For example, if the subscription price is €1.99, price_amount_micros is 1990000.",
"format":"int64",
"type":"string"
},
"priceCurrencyCode":{
"description":"ISO 4217 currency code for the subscription price. For example, if the price is specified in British pounds sterling, price_currency_code is \"GBP\".",
"type":"string"
},
"profileId":{
"description":"The profile id of the user when the subscription was purchased. Only present for purchases made with 'Subscribe with Google'.",
"type":"string"
},
"profileName":{
"description":"The profile name of the user when the subscription was purchased. Only present for purchases made with 'Subscribe with Google'.",
"type":"string"
},
"purchaseType":{
"description":"The type of purchase of the subscription. This field is only set if this purchase was not made using the standard in-app billing flow. Possible values are: \n- Test (i.e. purchased from a license testing account)",
"format":"int32",
"type":"integer"
},
"startTimeMillis":{
"description":"Time at which the subscription was granted, in milliseconds since the Epoch.",
"format":"int64",
"type":"string"
},
"userCancellationTimeMillis":{
"description":"The time at which the subscription was canceled by the user, in milliseconds since the epoch. Only present if cancelReason is 0.",
"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"
},
"appVersionCode":{
"description":"Integer version code of the app as installed at the time the review was written. May be absent.",
"format":"int32",
"type":"integer"
},
"appVersionName":{
"description":"String version name of the app as installed at the time the review was written. May be absent.",
"type":"string"
},
"device":{
"description":"Codename for the reviewer's device, e.g. klte, flounder. May be absent.",
"type":"string"
},
"deviceMetadata":{
"$ref":"DeviceMetadata",
"description":"Some information about the characteristics of the user's device"
},
"lastModified":{
"$ref":"Timestamp",
"description":"The last time at which this comment was updated."
},
"originalText":{
"description":"Untranslated text of the review, in the case where the review has been translated. If the review has not been translated this is left blank.",
"type":"string"
},
"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"
},
"starRating":{
"description":"The star rating associated with the review, from 1 to 5.",
"format":"int32",
"type":"integer"
},
"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"
},
"thumbsDownCount":{
"description":"Number of users who have given this review a thumbs down",
"format":"int32",
"type":"integer"
},
"thumbsUpCount":{
"description":"Number of users who have given this review a thumbs up",