# Create a Pay-in Instance

This endpoint allows you to create a new payment instance and receive a in the response an `instanceId.`The instanceId can be used further along with the other exposed API's to create a completely customisable host to host integration.&#x20;

**Endpoint**

<mark style="color:green;">**`POST`**</mark>`https://api.tylt.money/h2h/in/upi/createPayinInstance`

**Request Headers**

{% tabs %}
{% tab title="First Tab" %}

<table data-full-width="true"><thead><tr><th width="133">Name</th><th width="79">Type</th><th width="167">Example</th><th>Description</th></tr></thead><tbody><tr><td>X-TLP-APIKEY</td><td>string</td><td>93ee3c5e133697251b5362bcf9cc8532476785t8768075616f58d88</td><td>Your Tylt API Key, used to identify your account in API requests.</td></tr><tr><td>X-TLP-SIGNATURE</td><td>string</td><td>d0afef3853dfc8489c8b9affa5825171fdd7y7685675e4966a05f66ed2b3eaf9462b3c9c0</td><td>HMAC SHA-256 signature generated using the API Secret Key to secure the request.</td></tr></tbody></table>
{% endtab %}
{% endtabs %}

{% hint style="warning" %}
When using the API, ensure to include your API Key and generate the signature for the request payload using your API Secret. The tables provided above contain example values for illustration purposes only. Please refer to the code snippets for detailed instructions on how to sign the request and generate the signature properly.
{% endhint %}

**Request Body**

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

<table data-header-hidden><thead><tr><th width="201"></th><th width="121"></th><th></th></tr></thead><tbody><tr><td><strong>Field Name</strong></td><td><strong>Type</strong></td><td><strong>Description</strong></td></tr><tr><td><code>userDetails</code></td><td><code>JSON Object</code></td><td>Custom fields associated with the user, supplied by the merchant. These fields are included in webhook notifications and other API responses for easy reference and tracking. An empty object can be sent.</td></tr><tr><td><code>merchantOrderId</code></td><td><code>string</code></td><td><strong>Mandatory</strong>.A UUID used by the merchant to reference this instance or any transaction related to it.</td></tr><tr><td><code>callBackUrl</code></td><td><code>string</code></td><td><strong>Mandatory</strong>.The URL to which payment status updates are sent.</td></tr><tr><td><code>amount</code></td><td><code>number</code></td><td><strong>Mandatory</strong>. This is the amount the user wants to deposit in USDT or INR equivalent. If this field is empty user can enter the value in the payment flow. </td></tr><tr><td><code>currencySymbol</code></td><td><code>string</code></td><td><strong>Mandatory</strong>. Supported Currency is "USDT" or "INR" only.</td></tr><tr><td><code>userEmail</code></td><td><code>string</code></td><td><strong>Mandatory</strong>. The emailId of the end user.</td></tr><tr><td><code>isKYCNeeded</code></td><td><code>number</code></td><td>1 or 0. If set to 0 the user will not be required to complete KYC or provide KYC. If field is in passed, default behaviour is KYC is required. This bypass needs to be approved by the admin for the Merchant.</td></tr><tr><td><code>isUTRNeeded</code></td><td>number</td><td>To be set <mark style="color:green;"><code>Mandatorily</code></mark> as 1.  The user will be required to provide the UTR (Unique Transaction Reference) number after making the payment. This is a <mark style="color:green;"><code>recommended</code></mark> setting as it significantly reduces payment failures, disputes, and chargebacks while also enabling seamless processing through our automated Lightning Bridge.</td></tr></tbody></table>
{% endtab %}
{% endtabs %}

{% hint style="warning" %}
**Flow Modularity**

1. **KYC Bypass**:
   * In certain use cases, KYC verification may not be required for the end user.
   * To bypass KYC, set `isKYCNeeded` to 0.
   * When enabled, the user will not be required to complete KYC, and any existing KYC records will not be checked.
   * **Important:** Merchants must have admin pre-authorisation to use the KYC bypass feature.
     {% endhint %}

**Code Snippet**

{% tabs %}
{% tab title="JavaScript (Axios)" %}

<pre class="language-javascript"><code class="lang-javascript">const axios = require('axios');
const crypto = require('crypto');

// Replace with your API Key and Secret
const apiKey = 'your-api-key';
const apiSecret = 'your-api-secret';

// Request body
const requestBody = {
    userDetails: {},
    amount: 500,
    currencySymbol: 'INR',
    merchantOrderId: crypto.randomUUID(),
    callBackUrl: 'https://www.test.com/callback',
    redirectUrl: 'https://www.test.com/callback',
    userEmail: 'test@test.com',
    isKYCNeeded: 0,
    isUTRNeeded:1,
};

// Convert request body to JSON
const raw = JSON.stringify(requestBody);

// Function to create HMAC SHA-256 signature
const createSignature = (secret, data) => {
    return crypto.createHmac('sha256', secret)
                 .update(data)
                 .digest('hex');
};

// Generate signature
const signature = createSignature(apiSecret, raw);

// Define headers
const headers = {
<strong>    "Content-Type": "application/json",
</strong>    "X-TLP-APIKEY": apiKey,
    "X-TLP-SIGNATURE": signature
};

// Send the request
axios.post('https://api.tylt.money/h2h/in/upi/createPayinInstance', raw, { headers })
    .then(response => console.log("Success:", response.data))
    .catch(error => console.error("Error:", error));

</code></pre>

{% endtab %}

{% tab title="Python" %}

```python
import requests
import hmac
import hashlib
import json
import uuid

# Replace with your API Key and Secret
api_key = 'your-api-key'
api_secret = 'your-api-secret'

# Request body
request_body = {
    "userDetails": {},
    "amount": 500,
    "currencySymbol": 'INR',
    "merchantOrderId": str(uuid.uuid4()),
    "callBackUrl": 'https://www.test.com/callback',
    "redirectUrl": 'https://www.test.com/callback',
    "userEmail": 'test@test.com',
    "isKYCNeeded": 0,
    "isUTRNeeded": 1,
}

# Convert request body to JSON
raw = json.dumps(request_body, separators=(',', ':'), ensure_ascii=False)

# Function to create HMAC SHA-256 signature
def create_signature(secret, data):
    return hmac.new(secret.encode(), data.encode(), hashlib.sha256).hexdigest()

# Generate signature
signature = create_signature(api_secret, raw)

# Define headers
headers = {
    "Content-Type": "application/json",
    "X-TLP-APIKEY": api_key,
    "X-TLP-SIGNATURE": signature
}

# Send the request
response = requests.post('https://api.tylt.money/h2h/in/upi/createPayinInstance', headers=headers, data=raw)
print("Response:", response.json())

```

{% endtab %}
{% endtabs %}

**Response**

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

```json
{
    "msg": "Trade created successfully.",
    "data": {
        "instanceId": "51138bbb-fe4e-11ef-bcfd-42010a280107",
        "tradeId": 2081,
        "accounts": {
            "transactionType": "pay-in",
            "amountPaidInLocalCurrency": 215.04999999999998,
            "localCurrency": "INR",
            "conversionRate": 93.5,
            "amountPaidInCryptoCurrency": 2.3,
            "cryptoCurrencySymbol": "USDT",
            "MDR_Rate": 4,
            "merchantAccountCredited": null,
            "merchantAccountDebited": null
        }
    }
}
```

{% endtab %}

{% tab title="Response Fields" %}

<table data-header-hidden><thead><tr><th width="236"></th><th width="96"></th><th></th></tr></thead><tbody><tr><td><strong>Field Name</strong></td><td><strong>Type</strong></td><td><strong>Description</strong></td></tr><tr><td>instanceId</td><td>string</td><td>The instance ID generated by Tylt, used as a global identifier. </td></tr></tbody></table>
{% endtab %}
{% endtabs %}
