Skip to main content

Transaction Storage


On paid plans, the transaction identifier of successful purchases (similar to a unique purchase order number) is saved in your app's database. This ensures receipts are unique across your app, so that consumable purchases cannot be redeemed multiple times, or non-consumable purchases are not awarded to different users at the same time. For cheat prevention, users can be hindered from sending a transaction more than once in order to unlock content they do not rightfully own.


Please refer to the App Setup on User Behaviour and User Identity sections for more information about transaction-user assignment and uniqueness.


Your monthly validation quota decreases for each new purchase, i.e. for a successful purchase where a transaction record does not yet exist. With the transaction record written and the same user sending the same receipt again, the request is not considered as a purchase, but a restore request (not decreasing your validation quota).

INDIE2 Years
PRO2 Years

Storage duration can reset in case of subscriptions using the same original transaction identifier. Otherwise, the transaction is deleted on the expiration date. If a transaction expired and the user sends the same receipt again, then the receipt is treated as a new purchase, which in turn decreases your monthly validation quota for another full duration of transaction storage.

* The FREE plan does not officially offer Transaction Storage, however internally we do store transaction identifiers for a maximum duration of 6 months in order to distinguish new and restored transactions.