Skip to main content

Mollie's webhook sends
the payment ID. Nothing else.
You fetch the rest.

Mollie gives European businesses one API for 15+ payment methods. Webhooks are unique: Mollie sends only the payment ID — you fetch the status yourself.

15+

methods

Webhook driven

id-only webhook

0

setup

Mollie is the dominant payment processor for European businesses, especially in the Netherlands, Belgium, and Germany. It supports iDEAL, SEPA Direct Debit, Bancontact, Belfius, Giropay, eps, and more — all from one integration. One set of API credentials covers every payment method, so your checkout logic doesn't change whether a customer pays by iDEAL or credit card.

Mollie's webhook behavior is different from most gateways and trips up many developers. When a payment status changes, Mollie sends a POST request to your webhookUrl. The body contains exactly one field: id — the payment ID. No status, no amount, no method. Your handler must then call GET /payments/{id} to retrieve the current payment details and act on the status field.

Payment statuses follow a clear path: openpendingpaid. Payments can also end as expired, failed, or canceled. For SEPA Direct Debit and bank transfers, the payment stays in pending for days before resolving. This mock lets you trigger any of the six statuses on demand.

15+ European payment methods. One API.

Different methods, different countries — same integration. Your webhook handler does not change per method.

🇳🇱

iDEAL

Netherlands bank transfer

🇩🇪

SEPA

Euro bank transfers

🇧🇪

Bancontact

Belgium debit

🇧🇪

Belfius

Belgian bank

🇩🇪

Giropay

German bank transfer

🇦🇹

eps

Austrian bank transfer

🇳🇴

Vipps

Norwegian mobile pay

🇬🇧

UK bank

Faster Payments

🇵🇱

Przelewy24

Polish transfers

💳

Credit card

Visa, Mastercard, Amex

🛒

Klarna

Buy now, pay later

💰

PayPal

PayPal wallet

📱

Apple Pay

iOS, Safari

🤖

Google Pay

Android, Chrome

🎫

Vouchers

Eco, Lunch, Gift

All methods return the same webhook. Whether the customer paid by iDEAL, card, or Klarna, your webhook handler receives an id=tr_xxx and you fetch the payment to see the result. You do not need per-method webhook logic.

Mollie webhooks are just an id. Nothing else.

This is Mollie's most surprising design decision. Unlike every other gateway that sends a full JSON payload, Mollie sends a form-encoded body with one field.

What Mollie sends to your webhookUrl

POST /webhooks/mollieapplication/x-www-form-urlencoded

id=tr_mock_xYzAbCd123

That is the entire body. One field. No JSON. No status. No amount.

Mollie intentionally keeps webhook payloads minimal to avoid sending sensitive data in delivery that might be logged. The ID is all you need to look up the payment.

What you do after receiving it

1

Receive the webhook

Parse req.body.id from the form-encoded body. Respond 200 immediately.

2

Fetch the payment

Call GET /payments/{id} to get the actual status, amount, and metadata.

3

Check status === 'paid'

Only fulfill if status is paid. Any other status — do nothing yet.

Payment status flow

A card payment typically goes open → paid. Async methods (iDEAL, SEPA) often go open → pending → paid.

openCreated
pendingAwaiting transfer
paidSettled
or
expiredLink expired
failedDeclined
canceledCustomer canceled

Only paid means money moved. Every other final status (expired, failed, canceled) means no charge occurred.

Integration code

curl -X POST https://mockgateway.com/api/base/mollie/v2/payments \
  -H "Authorization: Bearer YOUR_MOCK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": {
      "value": "49.99",
      "currency": "EUR"
    },
    "description": "Acme Pro subscription — Oct 2025",
    "redirectUrl": "https://yourapp.com/checkout/return",
    "webhookUrl": "https://yourapp.com/webhooks/mollie",
    "method": "ideal",
    "locale": "nl_NL",
    "metadata": { "order_id": "ORD-MOL-0042" }
  }'

Request parameters

Sent to POST /api/base/mollie/v2/payments

Request parameters
ParameterTypeRequiredDescription
amount.valuestringrequired

Amount as string (e.g. 10.00)

e.g. 10.00
amount.currencystringrequired

ISO 4217 currency

e.g. EUR
descriptionstringrequired

Payment description

e.g. Order #12345
redirectUrlstringoptional

Redirect URL after payment

webhookUrlstringoptional

Webhook URL for status updates

Response fields

Response fields
FieldTypeDescription
idstringMollie payment ID
statusenumPayment status
created_atdatetime

Questions about Mollie

Other gateway templates

Looking for a different provider?