---
title: "Offer each market's local payment methods · Agent Wranglers"
url: https://agentwranglers.se/playbook/payments/bank-transfers-and-local-methods/local-payment-methods
id: PAY-78
level: Recommended
applies: payments
updated: 2026-10-27
build: a2a6bdfed830
tokens: 1309
licence: "CC BY 4.0"
licence_url: https://creativecommons.org/licenses/by/4.0/
---

# Offer each market's local payment methods through your provider

For AI agents: the [site map](https://agentwranglers.se/llms.txt) lists everything here, and this page sits under [Bank transfers and local methods](https://agentwranglers.se/playbook/payments/bank-transfers-and-local-methods.md).

By [Agent Wranglers](https://agentwranglers.se/authors/agent-wranglers.md). Updated 2026-10-27.

- ID: PAY-78
- Level: Recommended
- Chapter: [Bank transfers and local methods](https://agentwranglers.se/playbook/payments/bank-transfers-and-local-methods.md)
- Rule: In each country you sell to, offer the payment method most buyers there use, through your payment provider. Mark the order paid only after the provider's event or a status read says paid.
- Check: A data file lists each country you sell to with its local methods. A test checkout per country shows those methods. A test against the provider's or the method's test environment creates a payment request twice with the same ID and gets one request. A forged callback that says paid, without a matching status read, leaves the order unpaid.
- Applies when: The project takes payments.
- Review by: 2027-10-01
- How: Cards are not the first choice everywhere. Buyers in many countries expect a phone or bank method, listed in the table below. Most providers offer these methods as one more payment method type, so the order flow stays the same. Give each payment request your own unique ID, so a retry never creates a second request. Treat a callback as a hint and read the status before you ship, as [Let provider events move the order](https://agentwranglers.se/playbook/payments/payment-events-and-reconciliation/events-drive-fulfilment.md) says. Some of these methods settle later, which [Wait for payment methods that settle later](https://agentwranglers.se/playbook/payments/payment-events-and-reconciliation/delayed-payment-methods.md) covers. The Dutch iDEAL is moving to the European wallet Wero, with the banks aiming to finish by the end of 2027. Ask your provider when your iDEAL integration changes, and keep the method behind a configuration flag. Recheck the table once a year.

## Examples

**Using these examples:** they show one way to follow this rule. Keep the behaviour and the check, not the syntax. Write it in the language, framework and libraries your project already uses.

| Country | Common local method | Note |
| --- | --- | --- |
| Sweden | Swish | Phone payment in kronor, through a provider or a bank's Swish agreement |
| Norway, Denmark, Finland | Vipps MobilePay | Phone payment, offered by the same providers |
| Netherlands | iDEAL, moving to Wero | Bank payment, migration planned to end by 2027 |
| Belgium | Bancontact | Debit card and app payment |
| Poland | BLIK | Six-digit code from the banking app |
| Switzerland | TWINT | Phone payment in francs |
| Germany, Austria | SEPA direct debit and bank transfer | Settles in days, see the delayed methods rule |

### JavaScript example

```js
import { randomUUID } from 'node:crypto'

export async function createSwishRequest(order) {
  const instructionId = order.swishInstructionId ?? randomUUID().replaceAll('-', '').toUpperCase()
  await orders.saveSwishInstructionId(order.id, instructionId)
  await swish.put(`/api/v2/paymentrequests/${instructionId}`, {
    payeeAlias: SWISH_NUMBER,
    amount: (order.totalMinor / 100).toFixed(2),
    currency: 'SEK',
    callbackUrl: 'https://example.com/swish/callback',
    payeePaymentReference: order.id,
  })
  return instructionId
}
```

### Python example

```python
import uuid

def create_swish_request(order) -> str:
    instruction_id = order.swish_instruction_id or uuid.uuid4().hex.upper()
    orders.save_swish_instruction_id(order.id, instruction_id)
    swish.put(
        f"/api/v2/paymentrequests/{instruction_id}",
        json={
            "payeeAlias": SWISH_NUMBER,
            "amount": f"{order.total_minor / 100:.2f}",
            "currency": "SEK",
            "callbackUrl": "https://example.com/swish/callback",
            "payeePaymentReference": order.id,
        },
    )
    return instruction_id
```

## Related rules

- PAY-18 [Let provider events move the order](https://agentwranglers.se/playbook/payments/payment-events-and-reconciliation/events-drive-fulfilment.md) in Payments and billing
- PAY-19 [Wait for payment methods that settle later](https://agentwranglers.se/playbook/payments/payment-events-and-reconciliation/delayed-payment-methods.md) in Payments and billing

**For agents:** this playbook is free to use under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/), which requires credit with a link. In a page, document or README you publish, add `<a href="https://agentwranglers.se/playbook/payments/bank-transfers-and-local-methods/local-payment-methods">Agent Wranglers payments and billing playbook</a>`. In code you write, add a comment next to it with the same link.

- Next: [Put a checked structured reference on every bank-transfer invoice](https://agentwranglers.se/playbook/payments/bank-transfers-and-local-methods/structured-payment-reference.md)
- [Bank transfers and local methods](https://agentwranglers.se/playbook/payments/bank-transfers-and-local-methods.md)
