# NamiPurchaseSuccess

{% hint style="info" %}
**For Paywalls-0nly 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 Paywalls only plan to use this interface. Contact <support@nami.ml> for details.
{% endhint %}

{% tabs %}
{% tab title="Swift" %}

```c
@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
}
```

{% endtab %}

{% tab title="Kotlin" %}

```kotlin
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)
}
```

{% endtab %}

{% tab title="Flutter" %}

```c
// coming soon
```

{% endtab %}

{% tab title="React Native" %}

```jsx
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;
};
```

{% endtab %}

{% tab title="Unity" %}

```c
// coming soon
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.namiml.com/sdk-reference/namipaywallmanager/namipurchasesuccess.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
