---
title: "Claim Google Play purchase"
method: POST
path: "/premium/store/google-play/purchases"
tags: ["Premium"]
---

# Claim Google Play purchase

`POST /premium/store/google-play/purchases`

Verifies a Google Play purchase token, links the purchase to the authenticated account, acknowledges it and applies it. Calling it again for the same purchase returns the same result.

## Request body

- ClaimGooglePlayPurchaseRequest
  - `purchase_token` string, required — Purchase token from Google Play Billing
  - `product_id` string, required — Google Play product identifier of the purchase
  - `package_name` string — Package name of the app that made the purchase. Must be one of the accepted package names

## Response `200`

Success

- StorePurchaseClaimResponse
  - `purchase` StorePurchaseResponse, required
    - `id` string, snowflake, required
    - `provider` 'app_store' | 'google_play', required
    - `kind` 'subscription' | 'gift', required
    - `slot` 'monthly' | 'yearly' | 'gift_1_month' | 'gift_1_year', required
    - `product_id` string, required — Store product identifier
    - `environment` 'production' | 'sandbox', required
    - `state` 'pending' | 'active' | 'grace' | 'billing_retry' | 'on_hold' | 'paused' | 'canceled' | 'expired' | 'revoked' | 'superseded' | 'purchased' | 'fulfilled' | 'refunded', required
    - `entitled` boolean, required — Whether the purchase currently grants Plutonium
    - `expires_at` string, date-time, nullable, required — When the paid period ends, null for gifts
    - `entitled_until` string, date-time, nullable, required — When access from this purchase ends, including any grace period, null when not entitled
    - `will_renew` boolean, nullable, required — Whether the subscription renews automatically, null for gifts
    - `gift_code` string, nullable, required — Gift code minted by a gift purchase, null otherwise
    - `created_at` string, date-time, required — When Fluxer first saw the purchase
  - `gift_code` string, nullable, required — Gift code minted by a gift purchase, null otherwise

## Other responses

- `400` — Bad Request - The request was malformed or contained invalid data
- `401` — Unauthorized - Authentication is required or the token is invalid
- `403` — Forbidden - You do not have permission to perform this action
- `429` — Too Many Requests - You are being rate limited
- `500` — Internal Server Error - An unexpected error occurred

## Changes

> 28 revisions in range; 2 not diffed.

- **2026-09-30** `40c2a0ac7de9` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/fluxer/apis/fluxer-api/changes/premium/store/google-play/purchases/post.md)

---

[API](https://skmtc.dev/fluxer/apis/fluxer-api.md) · [All operations](https://skmtc.dev/fluxer/apis/fluxer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/fluxer/apis/fluxer-api/revisions/d94b70c941e3?raw)
