@objc public class NamiPurchaseSuccess: NSObject, Codable {
    let product: NamiSKU
    let transactionID: String
    let originalTransactionID: String
    let originalPurchaseDate: Date
    let expiresDate: Date?
    let purchaseDate: Date
    let price: Decimal
    let currencyCode: String
    let locale: Locale
    let purchaseSource: NamiPurchaseSource
}
sealed class NamiPurchaseSuccess(
    open val product: NamiSKU,
    open val expiresDate: Date?,
    open val purchaseDate: Date,
    open val purchaseSource: NamiPurchaseSource,
    open val description: String?
) {
    data class GooglePlay(
        override val product: NamiSKU,
        override val expiresDate: Date?,
        override val purchaseDate: Date,
        override val purchaseSource: NamiPurchaseSource,
        override val description: String?,
        val orderId: String,
        val purchaseToken: String,
    ) : NamiPurchaseSuccess(product, expiresDate, purchaseDate, purchaseSource, description)

    data class Amazon(
        override val product: NamiSKU,
        override val expiresDate: Date?,
        override val purchaseDate: Date,
        override val purchaseSource: NamiPurchaseSource,
        override val description: String?,
        val receiptId: String,
        val localizedPrice: String,
        val userId: String,
        val marketplace: String
    ) : NamiPurchaseSuccess(product, expiresDate, purchaseDate, purchaseSource, description)
}
// coming soon
export type PurchaseSuccessIos = {
  product: PurchaseSuccessProduct;
  transactionID: string;
  originalTransactionID: string;
  originalPurchaseDate: number;
  purchaseDate: number;
  expiresDate?: number;
  price: string;
  currencyCode: string;
  locale: string;
};

export type PurchaseSuccessGooglePlay = {
  product: PurchaseSuccessProduct;
  orderId: string;
  purchaseDate: number;
  expiresDate?: number;
  purchaseToken: string;
  purchaseSource: "CAMPAIGN" | "MARKETPLACE" | "UNKNOWN";
};

export type PurchaseSuccessAmazon = {
  product: PurchaseSuccessProduct;
  purchaseDate: number;
  expiresDate?: number;
  purchaseSource: "CAMPAIGN" | "MARKETPLACE" | "UNKNOWN";
  receiptId: string;
  localizedPrice: string;
  userId: string;
  marketplace: string;
};
// coming soon

📘

For Paywall Management-only plans

This method is for customers who have implemented their own in-app purchases or subscription code directly with the App Store, Google Play, etc. or who are using another third-party for subscription or purchase management.

Your Nami account needs to be on a Paywall Management-only plan to use this interface. Contact [email protected] for details.