Fundations supports four payment providers. PayPal is included in the free plugin. Mollie, Stripe, and the WooCommerce integration require Fundations Pro with an active license.

Overview
| Provider | Plugin | Payment methods | Best for |
|---|---|---|---|
| PayPal | Free | PayPal wallet, Pay Later, card via PayPal | Quick setup, global reach |
| Mollie | Pro | iDEAL, Credit card, Bancontact, SEPA Direct Debit, Apple Pay, Google Pay, SOFORT, Giropay, EPS, Przelewy24, Belfius, KBC, PayPal via Mollie | Europe, especially NL/BE/DE |
| Stripe | Pro | Card (Visa, Mastercard, Amex), iDEAL, Bancontact | International card payments |
| WooCommerce | Pro | Any WooCommerce payment gateway | Sites already running WooCommerce |
How provider selection works
Donors only see providers that are both enabled in Fundations settings and have valid API credentials. The donation form reads the get_fund_allowed_payment_providers filter to determine which provider slugs are accepted. Submitting a donation with a provider that is disabled results in an error and no charge.
You can activate more than one provider at the same time. When multiple providers are enabled, each appears as a selectable option on the donation form.
Choosing a provider
Netherlands, Belgium, or broader Europe: Mollie covers the widest range of local European payment methods and is the recommended choice for European campaigns.
International or primarily card-based: Stripe is a reliable option for campaigns where donors mostly pay by card and are located outside Europe.
Simplest possible setup: PayPal requires only a Business account and client ID/secret. It is available without a Pro license.
Already using WooCommerce: The WooCommerce integration lets campaigns attach physical or digital products to a donation and routes order fulfilment through your existing WooCommerce setup.
Test mode
Every provider supports a sandbox or test mode. Always verify your complete payment flow in test mode before accepting real donations. Each provider’s page explains how to switch between test and live.
Thank-you page
After a payment completes, donors are sent to a thank-you page. The URL is resolved in this order:
- A per-block thank-you page set in the donation form block settings
- The global
get_fund_donation_thank_you_pageoption (set in Fundations settings) - The fundraiser’s own page as a fallback
Webhook URLs
All three providers use asynchronous webhooks to confirm payments. The webhook URLs are:
| Provider | Webhook URL |
|---|---|
| PayPal | https://yoursite.com/wp-json/get-fund/v1/paypal-webhook |
| Mollie | https://yoursite.com/wp-json/get-fund/v1/mollie-webhook |
| Stripe | https://yoursite.com/wp-json/get-fund/v1/stripe-webhook |
These URLs must be publicly reachable. Local development environments (localhost, ngrok without HTTPS, sites behind a firewall) will not receive webhooks.
Developer reference
Filters
| Filter | Signature | Purpose |
|---|---|---|
get_fund_allowed_payment_providers | ( string[] $providers ) | Whitelist of accepted provider slugs. Default: ['mollie', 'stripe', 'paypal', 'test', '']. Add or remove slugs to control which providers the form accepts. |
get_fund_create_payment | ( WP_Error $default, string $provider, int $donation_id, float $amount, string $description, string $donor_email ) | Primary payment dispatch. Return ['payment_id' => string, 'payment_url' => string] to redirect the donor, or a WP_Error to abort. PRO hooks in at priority 10 for mollie and stripe. |
get_fund_mollie_payment_methods | ( array $methods ) | Returns the list of available Mollie methods with icons. PRO hooks in and returns cached Mollie API data. Structure per entry: ['id', 'name', 'image_1x', 'image_2x', 'image_svg']. |
get_fund_donation_redirect_url | ( string $return_url, int $donation_id ) | Filters the donor redirect URL after payment. Applied in the Mollie path only. |
Actions
| Action | Signature | Fired by |
|---|---|---|
get_fund_donation_paid | ( int $donation_id ) | Mollie and Stripe webhooks and return handlers on confirmed payment. NOT fired by PayPal (PayPal fires get_fund_donation_completed directly). |
get_fund_donation_completed | ( int $donation_id, array $data ) | All three providers on confirmed payment. $data contains amount, action_id, donor_name, donor_email. |
get_fund_donation_status_transition | ( int $donation_id, string $new_status, string $old_status ) | Mollie on every status change (paid, cancelled, failed). |
Adding a custom payment provider
// 1. Allow the provider slug
add_filter( 'get_fund_allowed_payment_providers', function( $providers ) {
$providers[] = 'my_provider';
return $providers;
} );
// 2. Handle payment creation
add_filter( 'get_fund_create_payment', function( $default, $provider, $donation_id, $amount, $description, $email ) {
if ( $provider !== 'my_provider' ) {
return $default;
}
// Create payment with your API
$result = my_provider_create_payment( $amount, $email, $description );
if ( is_wp_error( $result ) ) {
return $result;
}
return [
'payment_id' => $result['id'],
'payment_url' => $result['checkout_url'],
];
}, 10, 6 );