---
title: "Claim App Store transaction"
method: POST
path: "/premium/store/app-store/transactions"
tags: ["Premium"]
---

# Claim App Store transaction

`POST /premium/store/app-store/transactions`

Verifies a StoreKit 2 signed transaction, links the purchase to the authenticated account and applies it. Calling it again for the same purchase returns the same result. Finish the transaction after a 200 or a 400 or 403 error. Leave it unfinished after a 429, a 5xx or a network failure.

## Request body

- ClaimAppStoreTransactionRequest
  - `signed_transaction` string, required — JWS signed transaction from StoreKit 2 (Transaction.jwsRepresentation)

## 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/app-store/transactions/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)
