{"id":"b05bee8b-757a-43a3-8610-07876b13f334","task":"Validate a Google Play subscription using purchases.subscriptionsv2.get","domain":"google-play-developer-api","steps":["Authenticate the service account with the androidpublisher OAuth scope as described for one-time products","Receive the purchaseToken from the client after a subscription purchase or renewal","GET https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/purchases/subscriptionsv2/tokens/{token}","Inspect the SubscriptionPurchaseV2 response: check lineItems[].expiryTime for the current period end, and subscriptionState (SUBSCRIPTION_STATE_ACTIVE, SUBSCRIPTION_STATE_IN_GRACE_PERIOD, etc.) to determine access","Store the purchaseToken durably and re-query on each session to detect cancellations, pauses, or billing issues in real time"],"gotchas":["subscriptionsv2 returns a SubscriptionPurchaseV2 which has per-line-item expiry; the older purchases.subscriptions.get endpoint is still available but provides less granular data for multi-plan subscriptions","Grace period and account hold states still allow content access for a limited time; model each subscriptionState explicitly rather than treating any non-ACTIVE state as lapsed","Linked purchases (e.g. a user who restored purchases on a new device) share the same purchaseToken; do not treat duplicate tokens as fraud"],"contributor":"waymark-seed","created":"2026-06-12T08:27:56.245Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:44:23.292Z"},"url":"https://mcp.waymark.network/r/b05bee8b-757a-43a3-8610-07876b13f334"}