# QRIS payments

Learn about QRIS, a QR code-based payment method popular in Indonesia.

Quick Response Code Indonesian Standard (QRIS) is a real-time payment system developed by Bank Indonesia. Customers pay by scanning a QR code and authorizing an instant bank-account transfer in their preferred digital wallet or banking app.
Payment method family: Real-time payments
Usability: Single-use
Access type: Instant provisional access
Payment confirmation timing: Immediate
Settlement timing: Up to 4 business days (T+4)
## Eligibility and availability 

### Account eligibility
Business location: ID, US
Account type: ✓ Merchant, ✗ Platform or marketplace (Connect)
Business model: ✓ B2B, ✓ B2C
Your account might be reviewed after activation to confirm eligibility. While QRIS doesn’t enforce any additional website requirements, make sure that you provide a website that meets the [Stripe account activation requirements](https://support.stripe.com/questions/business-website-for-account-activation-faq). You can contact [Stripe support](https://support.stripe.com/) to appeal any QRIS capability restrictions.

Stripe accounts in the following countries can accept QRIS payments that settle in a supported currency.

AMER: [Preview] US

APAC: [Preview] ID

Customers in the following countries can use QRIS.

APAC: [Preview] ID

### Payment support
Customer location: ID
Presentment currency: IDR
Geographic coverage: ✓ Domestic, ✓ Crossborder
Transaction limits: Minimum amount: 1.00 IDR

Maximum amount: 10,000,000.00 IDR
> Indonesia doesn’t use cents because of inflation. Therefore, all prices must end in .00 (that is, don’t use prices such as 10,000.95 IDR).

## Capabilities 
Recurring payments: ✗ Not supported

Payment authorizations:
  ✗ Extended authorizations
  ✗ Flexible extended authorizations
  ✗ Incremental authorizations
  ✗ Decremental authorizations
  ✗ Re-authorizations

Payment captures:
  ✗ Manual capture
  ✗ Partial capture
  ✗ Multi-capture
  ✗ Over-capture

Refunds:
  ✓ Partial refunds
  ✓ Full refunds
  Submission window: 45 days
  Processing time: Usually within a few minutes, but can take up to 24 hours

Disputes:
  ✗ Partial disputes
  ✗ Full disputes
### Refunds 

You can request a QRIS refund within 45 days of the original payment. Refunds usually complete within a few minutes, but can take up to 24 hours.

#### Refund process 

QRIS supports full and partial refunds. You can issue multiple partial refunds against a payment, up to the original payment amount.

#### Tracking refunds 

To check a refund’s status, open the payment in the [Dashboard](https://dashboard.stripe.com/payments) and click **View details** on the refund entry. You can also [retrieve the Refund object](https://docs.stripe.com/api/refunds/retrieve.md) and check its `status` field.

Stripe notifies you of the final status through a `refund.updated` or `refund.failed` *webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) event. [Verify webhook signatures](https://docs.stripe.com/webhooks.md#verify-events) to confirm that events came from Stripe. You can also use Stripe’s [public IP addresses](https://docs.stripe.com/ips.md) for network allowlisting. When a refund succeeds, the [Refund object](https://docs.stripe.com/api/refunds/object.md) status changes to `succeeded`. If the refund fails, the status changes to `failed` and Stripe returns the amount to your Stripe balance. You must refund the customer using another method.

### Disputes 

QRIS doesn’t support the standard dispute process—customers can’t file a chargeback, and funds are never withdrawn from your Stripe balance because of a dispute.

If a customer has a concern about a QRIS payment, they need to contact you directly. You can then issue a full or partial refund.

## Stripe product support 
Checkout UIs:
  ✓ Full page (Recommended)
  ✓ Payment Links
  ✓ Embedded form
  ✓ Payment Element
  ✗ Express Checkout Element
  ✗ Payment Method Messaging Element
  ✗ In-app payments

Products:
  ✗ Managed Payments
  ✗ Billing
  ✗ Invoicing
  ✗ Customer Portal
  ✗ Radar
  ✗ Terminal
  ✗ Connect

APIs:
  ✓ Checkout Sessions (Recommended)
  ✓ Payment Intents
  ✗ Payment Intents with setup_future_usage
  ✗ Setup Intents
  ✗ Off-session payments
## Customer experience 

#### 1. Choose QRIS

The customer selects QRIS at checkout.

#### 2. Open the QRIS payment page

Stripe redirects the customer to a payment page that displays a QR code. The flow is the same on desktop and mobile, and the PaymentIntent remains in `requires_action` while awaiting authorization.

#### 3. Authorize the payment

The customer scans the QR code using a supported digital wallet or banking app, then reviews and approves the payment. They must complete authorization within 15 minutes.

#### 4. See payment confirmation

After approval, the PaymentIntent changes to `succeeded` and the customer returns to the merchant's configured return URL. The merchant verifies the PaymentIntent status and displays confirmation that the payment succeeded.

### Statement descriptors 

QRIS payments appear on the customer’s bank or wallet statement using your Stripe account’s public business name.

QRIS doesn’t support customized [statement descriptors](https://docs.stripe.com/get-started/account/statement-descriptors.md). Any value you provide in [statement_descriptor](https://docs.stripe.com/api/payment_intents/create.md#create_payment_intent-statement_descriptor) is ignored.

## Enable QRIS 

If you use Stripe front-end products, enable QRIS in your [payment method settings](https://dashboard.stripe.com/settings/payment_methods). Stripe automatically determines which payment methods are most relevant to each customer.

If your integration requires manually listing payment methods, you can [configure QRIS as an accepted payment method](https://docs.stripe.com/payments/qris/accept-a-payment.md).
