> For the complete documentation index, see [llms.txt](https://docs.namiml.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.namiml.com/sdk-reference/namipaywallmanager/namipurchasesuccess.md).

# 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
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
