> ## Documentation Index
> Fetch the complete documentation index at: https://developer.tazapay.com/llms.txt
> Use this file to discover all available pages before exploring further.

# internet_banking_inr

> Accept payments via Indian internet banking using the `internet_banking_inr` payment method.

## Overview

The customer is redirected to a Tazapay-hosted checkout page to complete payment via their bank's internet banking portal. Settlement follows manual fund sighting by the Tazapay team.

***

## Step 1: Create a Payin

Create a payin with `invoice_currency: INR`. The payin is created with status `requires_payment_method`.

```bash theme={null}
curl --request POST \
     --url https://service-sandbox.tazapay.com/v3/payin \
     --header 'accept: application/json' \
     --header 'authorization: Basic xxxxxxxXXXXxxxxxxxxxxxxxxxxx' \
     --header 'content-type: application/json' \
     --data '{
  "invoice_currency": "INR",
  "amount": 10000,
  "transaction_description": "Test"
}'
```

***

## Step 2: Confirm the Payin

Confirm the payin to generate a redirect URL. Status moves to `requires_action`.

Set `payment_method_details.type` to `internet_banking_inr`.

```bash theme={null}
curl --request POST \
     --url https://service-sandbox.tazapay.com/v3/payin/pay_cttprok2ukmk385sbfm0/confirm \
     --header 'accept: application/json' \
     --header 'authorization: Basic xxxxxxxXXXXxxxxxxxxxxxxxxxxx' \
     --header 'content-type: application/json' \
     --data '{
  "customer_details": {
    "name": "Andrea Lark",
    "email": "andrea@example.com",
    "country": "IN"
  },
  "payment_method_details": {
    "type": "internet_banking_inr"
  }
}'
```

> [accordion] Combine Steps 1 & 2 into a single API call
>
> Pass all parameters to the Create Payin endpoint along with `"confirm": true`.
>
> | Field | Type | Required | Description |
> | - | - | - | - |
> | `confirm` | boolean | Yes | Confirms the payin on creation |
>
> ```bash theme={null}
> curl --request POST \
>      --url https://service-sandbox.tazapay.com/v3/payin \
>      --header 'accept: application/json' \
>      --header 'authorization: Basic xxxxxxxXXXXxxxxxxxxxxxxxxxxx' \
>      --header 'content-type: application/json' \
>      --data '{
>   "customer_details": {
>     "name": "Andrea Lark",
>     "email": "andrea@example.com",
>     "country": "IN"
>   },
>   "confirm": true,
>   "invoice_currency": "INR",
>   "amount": 10000,
>   "transaction_description": "test",
>   "payment_method_details": {
>     "type": "internet_banking_inr"
>   }
> }'
> ```

***

## Step 3: Redirect the Customer

The confirm response includes a `redirect_url` inside `latest_payment_attempt_data`. Redirect the customer to this URL to complete payment.

```json theme={null}
{
  "data": {
    "status": "requires_action",
    "latest_payment_attempt_data": {
      "expires_at": "2025-01-23T08:45:52Z",
      "redirect_url": "https://checkout-sandbox.tazapay.com/single-payment.html?tzid=..."
    }
  }
}
```

> [!WARNING]
>
> You must redirect the customer to `latest_payment_attempt_data.redirect_url` to enable payment completion.

***

## Step 4: Handle Post-Payment Events

Internet banking transactions follow a two-event flow. Tazapay first sends `payin.processing` when the customer initiates payment. Once funds are sighted and approved, `payin.succeeded` is triggered.

| Event | Description | Next Steps |
| - | - | - |
| `payin.processing` | Customer initiated payment; funds pending | Await `payin.succeeded` before fulfilling |
| `payin.succeeded` | Funds sighted and approved | Fulfill the order |
| `payment_attempt.failed` | URL expired unpaid | Re-confirm the payin to generate a new URL |

***

## Testing

| Scenario | Action |
| - | - |
| Simulate success | Click **Simulate Success** on the `redirect_url` → receives `payin.succeeded` |
| Simulate failure / expiry | Click **Simulate Failure** or **Simulate Expire** on the `redirect_url` → receives `payment_attempt.failed` |

***

## Refunds

`internet_banking_inr` does **not** support partial refunds. Only full refunds are available.

> [tab] Via Dashboard
>
> Refer to the [refund guide](https://support.tazapay.com/how-do-i-request-a-refund-from-my-dashboard).

> [tab] Via API
>
> ```bash theme={null}
> curl --request POST \
>      --url https://service-sandbox.tazapay.com/v3/refund \
>      --header 'accept: application/json' \
>      --header 'authorization: Basic xxxxxxxXXXXxxxxxxxxxxxxxxxxx' \
>      --header 'content-type: application/json' \
>      --data '{
>   "payin": "pay_cmiiaamaq0pbt3fkadm0",
>   "reason": "Customer Return"
> }'
> ```
>
> > [!NOTE]
> >
> > `amount` and `currency` are not required for a full refund.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.