# Revenue Cat

{% hint style="info" %}
You'll need to import the javascript file in your website before starting from this [link](https://docs.webtonative.com/javascript-apis/getting-started).
{% endhint %}

{% tabs %}
{% tab title="Plain Javascript" %}
{% code overflow="wrap" %}

```javascript
const { configure, isInitialized, setUserId, getCustomerInfo, showPaywall, makePurchase, restorePurchase } = window.WTN.RevenueCat;

//Initialises the RevenueCat SDK on iOS/Android.
configure({
    apiKey: "YOUR_REVENUECAT_API_KEY",
    userId: "optional_user_id", // optional
    callback: (response) => {
        console.log(response);
    }
});

//Check If SDK Is Initialised
isInitialised({
    callback: (response) => {
        console.log(response);
    }
})


//Setting User Id
setUserId({
    userId: "user_id",
    callback: (response) => {
        console.log(response);
    }
})

//Getting customer info
getCustomerInfo({
    callback: (response) => {
        console.log(response);
    }
})

//Showing th paywall
showPaywall({
    offeringId:"revenue_cat_offering_id",
    callback: (response) => {
        console.log(response);
    }
})

//Invoke default In App Purchase
makePurchase({
    productId:"store_product_id",
    callback: (response) => {
        console.log(response);
    }
})

//Restoring a purchase
restorePurchase({
    callback: (response) => {
        console.log(response);
    }
})
```

{% endcode %}
{% endtab %}

{% tab title="ES5+" %}
{% code overflow="wrap" %}

```
import { configure, isInitialized, setUserId, getCustomerInfo, showPaywall, makePurchase, restorePurchase } from "webtonative/RevenueCat";

//Initialises the RevenueCat SDK on iOS/Android.
configure({
    apiKey: "YOUR_REVENUECAT_API_KEY",
    userId: "optional_user_id", // optional
    callback: (response) => {
        console.log(response);
    }
});

//Check If SDK Is Initialised
isInitialised({
    callback: (response) => {
        console.log(response);
    }
})


//Setting User Id
setUserId({
    userId: "user_id",
    callback: (response) => {
        console.log(response);
    }
})

//Getting customer info
getCustomerInfo({
    callback: (response) => {
        console.log(response);
    }
})

//Showing th paywall
showPaywall({
    offeringId:"revenue_cat_offering_id",
    callback: (response) => {
        console.log(response);
    }
})

//Invoke default In App Purchase
makePurchase({
    productId:"store_product_id",
    callback: (response) => {
        console.log(response);
    }
})

//Restoring a purchase
restorePurchase({
    callback: (response) => {
        console.log(response);
    }
})
```

{% endcode %}
{% endtab %}
{% endtabs %}

Responses for the above fuctions

{% code overflow="wrap" %}

```
// 1. Configure
Success - { "type": "configure", "success": true }
Failure - { "type": "configure", "success": false, "error": "API_KEY_MISSING" }

// 2. Initialisation
Success - { "type": "isInitialized", "success": true, "isInitialized": true }
Failure - { "type": "isInitialized", "success": false, "isInitialized": false, "error": "ERROR_STRING" }

// 3. Setting User Id
Success - { "type": "setUserId", "success": true, "customerInfo": CustomerInfo }
Failure - { "type": "setUserId", "success": false, "error": "Error String" }

// 4. Getting Customer Info
Success - { "success": true, "customerInfo": CustomerInfo RevenueCat obj }
Failure - { "success": false, "error": Error String }

// 5. Showing Paywall
Success - 
// Purchase Success
{
  "type": "showPaywall",
  "success": true,
  // FOR IOS
  "transaction": {
    "transactionId": "STRING",
    "productId": "STRING",
    "purchaseDate": "STRING",
    "appUserId": "STRING",
    "storefrontId": "STRING"
  }
    // FOR ANDROID
  "transaction" :{
	 "productId": "STRING",
	 "purchaseDate": "STRING",
	 "appUserId": "STRING",
	 "transactionId": "STRING",
	 "googleOrderId": "STRING"
  }
}

// Restore Success
{ "type": "showPaywall", "success": true, "restore": true, "customerInfo": CustomerInfo }

Failure - 
//User Cancelled
{ "type": "showPaywall", "success": false, "error": "PURCHASE_FLOW_CANCELLED" }

// Purchase Failed
{ "type": "showPaywall", "success": false, "error": "Error String" }

// Restore Failed
{ "type": "showPaywall", "success": false, "restore": true, "error": "Error String" }
 
// 6. Make Purchase
Success - 
{
  "type": "makePurchase",
  "success": true,
  // For IOS
  "transaction": {
    "transactionId": "STRING",
    "productId": "STRING",
    "purchaseDate": "STRING",
    "storefrontId": "STRING",
    "appUserId": "STRING"
  }
  // FOR ANDROID
  "transaction" :{
	 "productId": "STRING",
	 "purchaseDate": "STRING",
	 "appUserId": "STRING",
	 "purchaseToken": "STRING",
	 "googleOrderId": "STRING"
  }
}

Failure - 
//User Cancelled
{ "type": "makePurchase", "success": false, "error": "PURCHASE_FLOW_CANCELLED" }

/Purchase Failed
{ "type": "makePurchase", "success": false, "error": "Error String" }
```

{% endcode %}


---

# 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.webtonative.com/javascript-apis/revenue-cat.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.
