# Mollie as your processor or failover

> Take payments with Mollie, alone or as the failover for Stripe. Connect an API key or an organization access token, assign it to your brands, run a test checkout, and set up reconciliation.

This guide connects a [Mollie](https://www.mollie.com) account to one of your legal entities, makes it take a brand's payments (or stand by as the failover for Stripe), and checks the whole path with a test checkout. Read [Payment processors](https://ownrecord.io/docs/concepts/processors.md) for how connections, webhooks and failover work.

## 1. Choose the credential

Mollie gives two kinds of credentials, and Ownrecord takes either:

| Credential                          | Looks like             | Use it when                                                                                                               |
| ----------------------------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| API key                             | `test_…` / `live_…`    | You want to start quickly. It belongs to one website profile and one mode.                                                |
| Organization access token + profile | `access_…` and `pfl_…` | You want [reconciliation](https://ownrecord.io/docs/concepts/reconciliation.md) to read Mollie's balance (fees, payouts). |

An API key does everything checkout, renewals, refunds and chargebacks need. Mollie only lets access tokens read balances, so with an API key the connection test reports `balances.read` as missing and the daily reconciliation reads nothing from Mollie. You can start with an API key and rotate to a token later on the same connection.

To create a token, open the Mollie dashboard → Developers → Organization access tokens, and give it `payments.read`, `payments.write`, `refunds.read`, `refunds.write`, `customers.read`, `customers.write`, `mandates.read`, `mandates.write`, `profiles.read` and `balances.read`. The profile ID is on the website profile's page.

## 2. Connect it

Work in **test mode** first. In the console, open the legal entity, then **Processor connections**, and fill in **Connect Mollie** with the test API key (or the token and the profile ID). Connecting needs a sign-in within the last 15 minutes.

Ownrecord tests the credential with Mollie before it stores anything (encrypted; it's never shown again). There is nothing to set up in the Mollie dashboard: every payment Ownrecord creates carries this connection's webhook URL, protected by a secret token.

Over the API, with an organization or entity key of the mode (an organization key names the entity with `Ownrecord-Entity`):

```bash
curl https://ownrecord.io/api/v1/processor_connections \
  -H "Authorization: Bearer $OWNRECORD_KEY" \
  -H "Ownrecord-Entity: ent_…" \
  -H "Idempotency-Key: $(uuidgen)" \
  --json '{ "processor": "mollie", "apiKey": "test_…" }'
```

## 3. Assign it to your brands

Under **Brand routing** on the same page, choose for each brand:

- **Primary**: the connection that takes the brand's checkouts. Choose Mollie here to take all payments with it.
- **Secondary (failover)**: on plans with the secondary processor feature, the connection that takes new checkouts while the primary is degraded. Choose Mollie here to keep Stripe as the primary and fail over to Mollie.

The page shows which connection is serving each brand now. Over the API: `PATCH /api/v1/processor_routing/{brandId}` with `primary` and `secondary`, and `GET /api/v1/processor_routing` to read it.

## 4. Run a test checkout

Create a checkout session for the brand in test mode (or use onboarding's **Test checkout**) and open it. After the details step and the terms, **Continue to pay** takes you to Mollie's test payment page: choose a method and the outcome (paid, failed, cancelled, expired). Mollie brings you back to the success page, which completes once Mollie's webhook has confirmed the payment. Then check:

- the invoice and the ledger posting of the sale;
- the connection's page (**Processor connections** → Mollie): the stored `payment.paid` event, processed;
- a failed or cancelled payment: the success page says the payment didn't go through and offers the checkout again.

Mollie must be able to reach Ownrecord's webhook URL, so test against your Ownrecord deployment, not a local development server (or run the local server behind a public `https` address).

## 5. Go live

Connect the live API key (or the token, in live mode) the same way and assign it under Brand routing in live mode. The go-live checklist asks for a live connection that passes its test.

## When Mollie has problems

If requests to Mollie fail several times in a row (it doesn't answer, or answers with server errors), Ownrecord marks the connection **degraded** and emails your owners and admins: brands that use it as primary send new checkouts to their secondary. Subscriptions keep charging Mollie mandates, since a saved method belongs to its processor. When Mollie works again, open the connection and choose **Mark active**.

## What's different from Stripe

- **Payment methods are chosen on Mollie's page**, from those enabled on your Mollie profile. The card country can't change the tax before paying, so the sale is invoiced at the quote the customer paid.
- **Subscriptions keep a mandate**, not a card: iDEAL and Bancontact first payments leave a SEPA Direct Debit mandate, whose renewals take a few days to settle. Trials save a card with a 0.00 payment.
- **Chargebacks** are taken at once and have no evidence API: respond in the Mollie dashboard (the evidence pack PDF is still built). A reversed chargeback closes the dispute as won.
