Why Non-Consumable product has originalTransactionId?

I try to call Get Transaction Info from App Store Server API, and the transactionId is for a Non-consumable type product, but it is odd that there are so many different transactionId and they have a same originalTransactionId

{
    "bundleId": "${bundleId}",
    "environment": "Production",
    "inAppOwnershipType": "PURCHASED",
    "originalPurchaseDate": 1691220528000,
    "originalTransactionId": "${originalTransactionId}",
    "productId": "${productId}",
    "purchaseDate": 1691220528000,
    "quantity": 1,
    "signedDate": 1692590989925,
    "storefront": "USA",
    "storefrontId": "143441",
    "transactionId": "${originalTransactionId}",
    "transactionReason": "PURCHASE",
    "type": "Non-Consumable"
}

the defination of Non-Consumable is can only purchase once for same apple account. But why there would have originalTransactionId?

Answered by App Store Commerce Engineer in 762442022

If the user has multiple devices, or restoreCompletedTransactions is called, new transaction ids will be created. However the underlying purchase, and therefore the original transaction id for a non-consumable, is still the same. In Original StoreKit transaction ids are per-device and can be restored, meaning both non-consumables and auto-renewing subscription transactions will have this multiple-transaction id per underlying purchase property.

Accepted Answer

If the user has multiple devices, or restoreCompletedTransactions is called, new transaction ids will be created. However the underlying purchase, and therefore the original transaction id for a non-consumable, is still the same. In Original StoreKit transaction ids are per-device and can be restored, meaning both non-consumables and auto-renewing subscription transactions will have this multiple-transaction id per underlying purchase property.

When a user clicks on "restoreCompletedTransactions," a new transaction ID is generated. Does the server receive any notification regarding this?

Assuming that when the user initially made a purchase, the client passed the appAccountToken field, the server can associate the purchase with the app store transaction using the appAccountToken after a successful purchase. However, when the user clicks to restore purchases on another device, does the app store send a server notification like it does for ONE_TIME_CHARGE after the purchased item is restored? If no notification is sent, is the server only able to validate whether the "purchase has been completed" by relying on the new transaction ID received from the client?

Why Non-Consumable product has originalTransactionId?
 
 
Q