# EPS

> Accept EPS — Austria's standard bank-redirect payment method — with VINR.

EPS (Electronic Payment Standard) is Austria's national online banking payment scheme, supported by all major Austrian banks and mandated by many Austrian merchants as the preferred checkout option. Customers pay directly from their bank account through a redirect to their bank's secure online banking portal. Payments are final on confirmation.

## Availability

| Detail    | Value                             |
| --------- | --------------------------------- |
| Countries | Austria                           |
| Currency  | EUR only                          |
| Flow      | Bank redirect                     |
| Finality  | Final on confirmation             |
| Refunds   | Supported via standard refund API |

## Payment flow

### Create the payment

Create a payment with `methods: ['eps']` and a EUR amount. You receive a `checkoutUrl` that shows the EPS bank picker.

### Customer selects their bank and authenticates

The customer picks their Austrian bank from a list and is redirected to that bank's secure online banking login. They authenticate with their banking credentials and approve the payment.

### Bank confirms and redirects back

On approval the bank confirms to VINR and redirects the customer to your `returnUrl`. The payment moves to `completed`.

### Fulfill on the webhook

Use `payment.completed` as the fulfillment trigger, not the return redirect.

## Creating an EPS payment

```typescript
import { Vinr } from '@vinr/sdk';

const vinr = new Vinr({ secretKey: process.env.VINR_SECRET_KEY });

const payment = await vinr.payments.create({
  amount: 3990,              // €39.90 in minor units
  currency: 'EUR',
  description: 'Order #1187',
  methods: ['eps'],
  returnUrl: 'https://yoursite.com/payment/complete',
  metadata: { orderId: '1187' },
});

// Redirect the customer to payment.checkoutUrl
```

Fulfill from the webhook:

```typescript
// POST /webhooks/vinr
const event = vinr.webhooks.verify(rawBody, req.headers['x-vinr-signature']);

if (event.type === 'payment.completed') {
  const payment = event.data;
  // payment.method → "eps"
  await fulfillOrder(payment.metadata.orderId);
}
```

## Settlement & timing

EPS payments are confirmed within seconds and captured in full at the moment of bank approval. The amount lands in your [balance](/docs/operations/balances) immediately and follows your normal [settlement](/docs/operations/settlement) schedule.

## Refunds

Refunds are returned to the customer's originating Austrian bank account, typically within one to three business days.

```typescript
const refund = await vinr.refunds.create({
  payment: 'pay_...',
  amount: 3990,   // full refund; omit amount for full
  reason: 'requested_by_customer',
});
```

Because EPS payments are final, there are no chargebacks. A refund is the only way to return funds after the payment completes.

## Testing

In the VINR sandbox, EPS redirects open a VINR test page where you choose **Approve** or **Fail** instead of a real bank portal. No Austrian bank account is required for testing.

## Limitations

- **EUR only.** EPS cannot process amounts in any other currency.
- **Austria only.** The method only appears for customers with an Austrian EPS-enabled bank account; presenting it outside Austria returns `method_not_available`.
- **No manual capture.** EPS captures in full at confirmation.

## See also

[Local methods](/docs/payments/payment-methods/add-payment-methods/local-methods) — Overview of all region-specific payment methods.

[iDEAL](/docs/payments/payment-methods/add-payment-methods/local-methods/ideal) — Bank redirect for Dutch customers.

[Refunds](/docs/payments/payment-operations/refund) — Issue full or partial refunds via the API.
