# IAP validation in IOS

**URL:** <https://forum.heroiclabs.com/t/iap-validation-in-ios/6369>\
**Category:** Local Setup\
**Tags:** server-framework\
**Created:** [August 6, 2025, 3:32am UTC](https://forum.heroiclabs.com/t/iap-validation-in-ios/6369 "2025-08-06T03:32:30Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![developerdinno](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.heroiclabs.com/developerdinno/32/2100_2.png) [@developerdinno](https://forum.heroiclabs.com/u/developerdinno)\
**Post date:** [August 6, 2025, 3:32am UTC](https://forum.heroiclabs.com/t/iap-validation-in-ios/6369/1 "2025-08-06T03:32:30Z")

</div>

I’m trying to validate Purchase Apple  
_`nakama.purchaseValidateApple`_`(`_`player.userId`_`,` _`receiptPayload`_`,` _`true`_`);`

here receiptpaylad have old transaction too how i get the latest since it give always seen before true.

so how handle this situation  
i using typescript with FROM [registry.heroiclabs.com/heroiclabs/nakama:3.27.1](http://registry.heroiclabs.com/heroiclabs/nakama:3.27.1)

---

<div class="post-metadata">

**Author:** ![sesposito](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.heroiclabs.com/sesposito/32/2594_2.png) [@sesposito](https://forum.heroiclabs.com/u/sesposito)\
**Post date:** [August 6, 2025, 10:08am UTC](https://forum.heroiclabs.com/t/iap-validation-in-ios/6369/2 "2025-08-06T10:08:09Z")

</div>

You’d have to sort the returned validated purchases by `purchaseTime`, or lookup the specific purchase you’re looking for based on its metadata.

---

<div class="post-metadata">

**Author:** ![developerdinno](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.heroiclabs.com/developerdinno/32/2100_2.png) [@developerdinno](https://forum.heroiclabs.com/u/developerdinno)\
**Post date:** [August 7, 2025, 5:41am UTC](https://forum.heroiclabs.com/t/iap-validation-in-ios/6369/3 "2025-08-07T05:41:50Z")

</div>

Thanks for your reply, but when I purchased an iap, it saved all previous transactions

---

<div class="post-metadata">

**Author:** ![developerdinno](https://sea2.discourse-cdn.com/flex020/user_avatar/forum.heroiclabs.com/developerdinno/32/2100_2.png) [@developerdinno](https://forum.heroiclabs.com/u/developerdinno)\
**Post date:** [August 7, 2025, 9:53am UTC](https://forum.heroiclabs.com/t/iap-validation-in-ios/6369/4 "2025-08-07T09:53:44Z")

</div>

```auto
const sortedPurchases = purchaseIapValidation.validatedPurchases.sort((a: nkruntime.ValidatedPurchase, b: nkruntime.ValidatedPurchase) => b.purchaseTime - a.purchaseTime);

```

```auto
const latestUnseenPurchase = sortedPurchases.find((p) => !p.seenBefore);

```

This is solution for some time, but sometimes error occurs.
