GiveWP crypto donations: how can I accept crypto donations with GiveWP?
Key takeaways
- Yes, and the code is public. The gateway is Payzum Crypto & Stablecoin Donations for Give (version 1.3.2, GPL-2.0-or-later) at github.com/payzum-dev/givewp-payzum, with a ready-to-upload zip released on 28 September 2026.
- The webhook completes the donation, not the donor's browser. A gift is marked Complete only when a signed HMAC-SHA-512 notification reports it finished and the amount matches the donation. Then GiveWP does what it always does: receipt email, campaign total, donor history.
- Enable it for Visual Form Builder forms. Since GiveWP 3.0, each form editor has its own gateway list. If Payzum isn't enabled on the Visual Form Builder tab, it won't appear on modern forms.
- One-time gifts only. The gateway doesn't support subscriptions, so GiveWP hides it when a donor picks a recurring gift. Keep your card gateway for monthly giving.
- Small gifts keep more. A $10 gift costs $0.69 at PayPal's US charity rate. A stablecoin gift on Base, Polygon or Solana costs a network fee measured in cents, and the crypto option gives card-testing bots nothing to test.
Payzum is a non-custodial, stablecoin-first crypto payment processor: payments settle directly to wallets the merchant controls. For GiveWP crypto donations, it publishes an open-source gateway plugin at github.com/payzum-dev/givewp-payzum. This guide is for nonprofits, churches, schools and causes that already raise money with GiveWP on WordPress. It covers why organizations are adding crypto in 2026, six checks for any GiveWP crypto gateway, and the Payzum plugin set up step by step. It also covers what the plugin deliberately doesn't do. If you want the fundraising case first, read crypto donations for churches and nonprofits. This post stays inside GiveWP.
Why nonprofits are adding GiveWP crypto donations in 2026
GiveWP is the default way many organizations take gifts on WordPress. Its WordPress.org listing showed 100,000+ active installations on 5 October 2026, with version 4.18.0 released on 1 October. Most of those forms take cards through PayPal or Stripe. Three pressures are pushing organizations to add a crypto option next to them.
Fixed fees eat small gifts. PayPal's US fee page, updated on 1 October 2026, gives confirmed 501(c)(3) charities a rate of 1.99% + $0.49 per domestic donation, plus 1.50% on international ones. On a $10 gift that's $0.69, or 6.9%. And if you run GiveWP's free Stripe gateway without a GiveWP license, GiveWP's own documentation (updated 22 July 2026) says it adds 2% to every one-time donation, on top of Stripe's fee.
Donation forms attract card testers. GiveWP's troubleshooting guide on spam donations, updated 2 July 2026, explains why. A donation form has no cart, so a bot that tries stolen card numbers is simpler to write. It notes that "bots tend to test forms with $1 or up to $5 amounts." Each run leaves a pile of fake donations and declined charges for someone to clean up.
Some donors already hold stablecoins. Diaspora members who send money home in USDT. Developers supporting the open-source project they use every day. Crypto-native supporters giving at year end. Many would rather send USDC than type a card number into a form, and some have cards that decline cross-border payments.
What a card-only GiveWP form costs your mission
Put numbers on a typical month. Say your form takes 200 gifts averaging $25, and 30 of them come from abroad. At PayPal's charity rate, each domestic gift costs $0.99 and each international one $1.36. That's about $209 a month, or $2,500 a year, before a single refund or dispute.
A card gift can also come back. The donor's bank can reverse it weeks or months later, usually after the money has been spent on the program. You lose the gift, and you may pay a dispute fee on top.
The quieter cost is time. A card-testing run means hours of deleting fake donations, refunding the ones that went through, and explaining the spike to your processor. GiveWP's main remedy is a higher minimum donation, which turns away real $5 donors too.
Then there's the donor you never see. Their card declined a cross-border gift, or they wanted to give USDC and found no way to do it on your form.
Why card gateways, custodial crypto and a bare wallet address fall short in GiveWP
Card gateways and PayPal win on reach and lose on cost and finality. Almost every donor can use them, and with GiveWP's Recurring Donations add-on they handle monthly giving. Keep them. But the percentage plus fixed fee hits small gifts hardest, gifts can be reversed, and the card form is what testing bots go after.
Custodial crypto donation platforms fix acceptance, not custody. The donor pays the platform's address, the platform holds a balance, and it pays you out on its schedule. That balance is something a provider can freeze or delay. And unless the platform integrates with GiveWP, the gift lives in its dashboard instead of your GiveWP reports.
A bare wallet address on the donate page skips everything else. It costs nothing and the payment is final. But GiveWP never hears about it: no donation record, no receipt email, no campaign progress, no donor history. Someone ends up matching blockchain transactions to thank-you emails by hand.
What an organization needs is a gateway that behaves like any other GiveWP gateway: a donation record, a receipt and a campaign total. It should also settle like crypto: final, in seconds, to a wallet your organization controls.
How to choose a GiveWP crypto donation gateway: six checks
Six questions separate a gateway you can run during a campaign from one you'll regret. Ask them of any vendor, including us:
- Where do the funds settle? In your organization's own wallet, or in a balance the provider holds and pays out later? Only the first leaves nobody able to freeze the money.
- Does it appear on Visual Form Builder forms? Since GiveWP 3.0, GiveWP keeps separate gateway lists for its two form editors, Visual Form Builder and Option-Based Form Editor, under GiveWP → Settings → Payment Gateways. A gateway built only for the older API can be installed and enabled and still never show on a modern form.
- What completes the donation? GiveWP's documentation says a donation stays Pending until the gateway notifies your site by webhook or IPN, and eventually turns Abandoned if that never happens. A donor reaching the thank-you page proves nothing. Look for a server-to-server notification whose signature is checked over the raw request bytes, with a replay window.
- Is the amount checked? A finished status says an invoice was paid. It doesn't say the invoice was for this donation's amount. The gateway should compare the settled amount and currency with the donation before marking it Complete.
- What happens on a retry, or two notifications at once? Payment providers resend notifications. If two are processed together, a donation can be completed twice: two receipts, and the gift counted twice in your campaign total.
- Does it fit your stack, and can you read it? GiveWP 4.18 runs on PHP 7.4 and later, but many gateways need newer PHP. WordPress.org's stats on 5 October 2026 show about 74% of WordPress sites on PHP 8.1 or later and 16.5% still on 7.4. Check yours, and prefer code that your developer, or a volunteer, can audit.
Our guide to open-source crypto payment plugins turns checks 3, 4 and 6 into a 15-minute audit you can run on any repository.
How Payzum's GiveWP gateway handles a crypto donation
The plugin is a GiveWP payment gateway built on GiveWP's next-gen gateway API and registered for Visual Form Builder forms. It does two jobs. It turns a submitted donation into a Payzum checkout. Then it lets a signed notification, and nothing else, complete the donation.
On the form: one more payment option
Donors see Crypto / Stablecoins (Payzum) next to your other gateways. There are no extra fields. When the donor submits, the plugin creates a Payzum invoice for the donation amount in your form's currency. The amount travels as an exact string, so it isn't rounded on the way out.
The invoice carries a reference made of the donation ID plus the last eight characters of its purchase key, so a guessed ID can't be matched to someone else's donation. It also carries an idempotency key, so a network retry can't create a second invoice for the same gift.
The donor then pays on Payzum's hosted checkout, with a QR code, a deposit address and a live status, from any wallet and without creating an account. By default they're redirected there. You can also open the checkout as a modal over your page or inline in place of the form.
The plugin doesn't choose the coin. The checkout offers only the tokens you accept, set in your Payzum dashboard under Merchants → Settings → Accepted tokens, and Payzum enforces that list on its side. For most organizations that means USDC and USDT on fast, low-fee networks: Solana confirms in about 0.4 seconds, and Base and Polygon in about two. If you also accept other crypto, optional auto-convert to USDC or USDT is available on most supported networks.
After payment: the signed notification completes it
Payzum notifies your site at /?give-listener=payzum. Before reading a single field, the plugin verifies an HMAC-SHA-512 signature over the raw request bytes with your webhook secret. The comparison runs in constant time, and anything outside a 10-minute replay window is rejected. A bad signature gets a 401.
Next, the plugin takes a per-donation database lock, so two notifications for the same donation can't run at the same time. If the lock is busy, it answers 503 and Payzum retries, so an occasional "busy" in your access log is normal. It also skips any event ID it has already processed.
On a finished payment, the plugin compares the settled amount and currency with the donation, with half a cent of tolerance. Overpayment is fine. A shortfall, a different currency or an amount it can't read moves the donation to Processing with a note: "reported as finished but … held for review, NOT completed." Only a match marks it Complete. The plugin also records which coin the donor chose.
The HTTP client and signature check come from the official payzum/payzum-php SDK, which ships inside the plugin, so there's no Composer step. The engineering behind this pattern is covered in signed webhooks for crypto payments.
What GiveWP does next
To GiveWP, a completed crypto gift is a completed gift. Your receipt email goes out, the gift counts toward the campaign goal, and it shows in your donation list, your reports and the donor's history. Your thank-you flow doesn't change.
Where the money goes
Straight to the wallet set in your Payzum dashboard. The plugin's code contains no wallet address, and Payzum never holds the funds, so there's no balance to withdraw, freeze or wait for. According to the plugin's readme, it sends Payzum only the amount, currency, donation reference and your callback and return URLs, and no donor personal data. The model is explained in what a non-custodial crypto payment processor is.
How to set up GiveWP crypto donations, step by step
Most of the time goes into the staging test, which is the step worth doing properly.
- Check your stack. You need PHP 8.1 or later, because the bundled SDK uses newer language features, plus GiveWP 3.0 or later and a site served over HTTPS. The plugin is verified against GiveWP 4.16. GiveWP is now at 4.18.0, so run step 8 on a staging copy before you go live.
- Set up your Payzum merchant account. Sign up at merchant.payzum.com and add the wallet your organization controls. Choose your accepted tokens, for example USDC on Base, Solana and Polygon, plus USDT. Copy your API key from the Merchants section and note your webhook (IPN) secret.
- Install the plugin. Download
payzum-give-1.3.2.zipfrom the repository's Releases page. In WordPress, go to Plugins → Add New → Upload Plugin, choose the zip and activate it. GiveWP must already be active. Don't use GitHub's green "Download ZIP" button: that archive unpacks to the wrong folder name. - Add your credentials. Go to GiveWP → Settings → Payment Gateways and open the Payzum section. Paste the API key and webhook secret, and set Environment to Staging / sandbox for now. Staging has its own keys; a production key won't work there. Until both credentials are saved, the gateway stays off your forms and an admin notice says what's missing.
- Register the IPN URL. The same screen shows Your IPN URL, which looks like
https://your-site.org/?give-listener=payzum. Paste it into your Payzum webhook settings. The plugin also sends it with every invoice. It must accept POST requests from the internet. Basic auth, a maintenance page or a firewall rule that blocks it will leave donations Pending until GiveWP marks them Abandoned. - Enable it for Visual Form Builder forms. Still under Payment Gateways, open the Visual Form Builder tab and enable Payzum. This is the step people miss, because the option-based editor keeps its own separate list. If you still run option-based forms, test them on staging: Payzum's documentation targets Visual Form Builder forms.
- Choose the currency and render mode. Leave Currency mode on Fiat and Fiat price currency on Site currency, unless your form amounts are already in a coin. Pick Redirect, Modal or Inline. If your site sends a Content-Security-Policy, allow
merchant.payzum.cominscript-src,frame-srcandconnect-srcfor the modal and inline modes. - Test on staging. Make a small donation on a test form. It should move from Pending to Complete with the note "Payzum: donation confirmed in full (finished)." Check that the receipt email arrives and the campaign total moves.
- Go live. Switch Environment to Production, paste your production key and secret, and make one small real donation.
The gateway settings at a glance
| Setting | What to enter |
|---|---|
| API key | Your 64-character key from the Merchants section of the Payzum dashboard. |
| Webhook secret | The IPN signing secret that verifies every HMAC-SHA-512 signature. |
| Environment | Production (merchant.payzum.com) or Staging / sandbox (staging.payzum.com, with separate keys). |
| Your IPN URL | Read-only. Paste it into your Payzum webhook settings. |
| Currency mode | Fiat (default): Payzum converts the donation total into the coin the donor picks. Crypto: your amounts are already in a coin, set as a bare symbol (usdc) plus a network (polygon). |
| Fiat price currency | Leave it on Site currency. Any other value re-denominates the gift instead of converting it. |
| Render mode | Redirect (default), Modal or Inline. |
| Debug log | Writes gateway events to the WordPress debug log, prefixed [payzum]. |
There is deliberately no coin selector and no signature-header field. Your coins live in the Payzum dashboard, and the header is fixed by the platform, so nothing on this screen can drift out of sync with your account.
What happens in GiveWP at each payment status
| What happened | Effect in GiveWP |
|---|---|
| Donor submits the form | Donation created as Pending; Payzum invoice created; note "awaiting payment" |
waiting | Note only |
finished, amount and currency match | Complete; receipt email and campaign total as usual |
finished, but short, in another currency or unreadable | Processing, with a note: held for review, not completed |
| Overpaid | Complete |
partially_paid | Processing (GiveWP has no "on hold" status) |
expired | Abandoned |
failed | Failed |
| Same notification delivered again | Ignored; the event ID was already processed |
| Two notifications at once | The second gets a 503 and is retried |
| Bad signature | 401; nothing changes |
Nothing in this table is triggered by the donor's browser. A closed tab can't lose a settled gift, and a faked return visit can't complete an unpaid one.
What the GiveWP crypto gateway doesn't do
Know these before you announce the option:
- No recurring donations. The gateway takes one-time gifts only. Crypto is pushed from the donor's wallet, so it can't be charged automatically each month. The gateway doesn't declare subscription support, so when a donor switches a Visual Form Builder form to a recurring gift, GiveWP removes Payzum from the list. Keep your card gateway for monthly giving.
- Refunds go out from your wallet. Payzum never holds the funds, so there's nothing for it to refund from. Send the stablecoins back yourself and record the refund in GiveWP.
- Mismatches need a person. A short or wrong-currency payment waits in Processing with a note until someone on your team decides what to do.
- Very small gifts can be below a network minimum. Each coin and network has a minimum amount. Below it, the donor sees a clear message asking them to give more or choose another method. Check the minimums for the tokens you accept.
- Distribution. As of 5 October 2026, the plugin is distributed as a GitHub release,
payzum-give-1.3.2.zip. It isn't listed in the WordPress.org plugin directory.
Use cases: nonprofits taking GiveWP crypto donations
The setup is the same for every organization. What changes is which part of it pays for itself.
- Animal rescue living on small gifts. A rescue in Ohio takes most gifts at $10 to $20 through PayPal's charity rate, which costs $0.69 on every $10. It adds Payzum as a second option and accepts USDC on Base and Solana. A $10 USDC gift lands in the rescue's wallet seconds after confirmation, for a network fee of cents. And the crypto option has no card field for testing bots to probe.
- Diaspora school-building appeal. A Nigerian-American association runs a GiveWP campaign to fund classrooms in Enugu. Members in the US and the UK give USDT, often from wallets they already use to send money home. Each gift counts toward the goal shown on the form. The association then pays the builder and suppliers from the same wallet, several at once with Payzum's stablecoin payouts.
- GivingTuesday match. On GivingTuesday, 1 December 2026, a youth-coding nonprofit runs a matching campaign in GiveWP. A crypto-native supporter gives $5,000 in USDC. At PayPal's charity rate, the same gift would cost $99.99 in fees. On-chain it costs a network fee, counts toward the match as soon as it's confirmed, and no dispute can pull it back after the match is announced.
- Open-source foundation with donors worldwide. A foundation behind a popular library gets gifts from developers in dozens of countries. International card gifts carry PayPal's extra 1.50%. Developers paying USDC on Base skip that, and the treasurer can check every gift on-chain against its donation reference. Because the plugin is GPL-licensed, a maintainer reviews the code before it goes live.
Payzum for GiveWP vs PayPal, Stripe and a bare wallet address
Compared on neutral criteria. PayPal figures are its US charity rate from the fee page updated on 1 October 2026. The GiveWP 2% comes from GiveWP's documentation for its free Stripe gateway, updated on 22 July 2026.
| Criterion | PayPal (US charity rate) | Stripe via GiveWP's free gateway | Bare wallet address | Payzum for GiveWP |
|---|---|---|---|---|
| Where the funds settle | Your PayPal balance, then your bank | Your Stripe balance, then your bank | Your wallet | Your own wallet, directly |
| What completes the donation in GiveWP | PayPal's notification | Stripe's webhook | Nothing: no donation is recorded | A signed notification, after an amount check |
| Cost per gift | 1.99% + $0.49; +1.50% international | Stripe's card fee, plus 2% to GiveWP on one-time gifts without a license | Network fee only | Network fee in cents on Base, Polygon or Solana |
| Time until you hold the funds | In PayPal at once; days to reach your bank | Days, on Stripe's payout schedule | Seconds after confirmation | Seconds after on-chain confirmation (Solana ~0.4 s, Base and Polygon ~2 s) |
| Reversals | Disputes and chargebacks | Disputes and chargebacks | None | None: confirmed payments are final |
| Card-testing exposure | Yes, on card payments | Yes | None | None: no card field |
| Recurring gifts in GiveWP | With GiveWP's Recurring Donations add-on | With GiveWP's Recurring Donations add-on | No | No: one-time gifts only |
| Receipt and campaign total in GiveWP | Yes | Yes | No | Yes |
| Gateway source code | Part of GiveWP | Part of GiveWP | Not applicable | Public on GitHub, GPL-2.0-or-later |
A custodial crypto donation platform is another fair option if you'd rather someone else handle everything. It holds the funds and pays them out on its schedule. Payzum is for organizations that want each gift in their own wallet and recorded in GiveWP. You don't have to drop anything: most organizations add Payzum as one more gateway next to cards.
Common objections, answered
"Our donors don't hold crypto."
Most don't, and they'll keep giving by card. The crypto option is for those who do: crypto-native supporters, developers and diaspora donors who already move money in stablecoins. It adds one line to your gateway list and changes nothing for everyone else.
"Our board won't hold volatile coins."
It doesn't have to. Accept only USDC and USDT, and every gift arrives as a dollar stablecoin. Your form amounts stay in your currency: in fiat mode, the donor pays the equivalent in the coin they pick. If you accept other crypto too, optional auto-convert to USDC or USDT is available on most supported networks. USDT vs USDC for payments helps you choose.
"How do we receipt a crypto gift?"
GiveWP records the gift in your form's currency and sends its usual receipt email, and the plugin notes which coin was used. How a crypto gift is valued and receipted for tax purposes depends on your jurisdiction, so confirm your receipt wording with your accountant.
"We don't install payment code we can't read."
Good, and you don't have to. The plugin is three PHP files, one JavaScript file and the bundled official SDK, all public under the GPL, the same license as WordPress. It stores no card data and no wallet address, sends Payzum no donor personal data, and rejects unsigned notifications before reading them.
Frequently asked questions
How can I accept crypto donations with GiveWP?
Install a crypto gateway such as Payzum's open-source plugin for GiveWP (GPL). Upload the payzum-give-1.3.2.zip release under Plugins → Add New → Upload Plugin, paste your API key and webhook secret under GiveWP → Settings → Payment Gateways, and enable Payzum on the Visual Form Builder tab. Donors then give USDC, USDT or other accepted crypto on a hosted checkout, and a signed notification completes each donation.
Does the Payzum GiveWP gateway support recurring donations?
No. It takes one-time gifts only, because crypto is pushed from the donor's wallet and can't be charged automatically. The gateway doesn't declare subscription support, so GiveWP hides it when a donor chooses a recurring gift. Keep a card gateway for monthly giving.
Why doesn't the crypto gateway show on my GiveWP donation form?
There are two common reasons. GiveWP keeps a separate enabled-gateway list for Visual Form Builder forms, so Payzum must be enabled on that tab under GiveWP → Settings → Payment Gateways. And the gateway stays hidden until both the API key and the webhook secret are saved.
What happens if a donor underpays or a notification arrives twice?
A partially paid invoice moves the donation to Processing, not Complete. A finished payment that is short, in another currency or unreadable is also held in Processing with a note for review. Repeated notifications are ignored by event ID, and a per-donation lock stops two deliveries from completing the same donation twice.
Which PHP and GiveWP versions does the plugin need?
PHP 8.1 or later and GiveWP 3.0 or later. The plugin is verified against GiveWP 4.16, so test on staging if you run 4.18. GiveWP itself still runs on PHP 7.4, so check your server: on 5 October 2026, WordPress.org stats showed about 74% of WordPress sites on PHP 8.1 or later.
Is the Payzum GiveWP plugin on WordPress.org?
No, as of 5 October 2026. It is public on GitHub at payzum-dev/givewp-payzum under GPL-2.0-or-later, with a packaged payzum-give-1.3.2.zip release you upload under Plugins → Add New → Upload Plugin. The Payzum PHP SDK is bundled, so there is no Composer step.
Book 20 minutes and we'll get crypto giving live in your GiveWP
Every organization raises money differently: one campaign or many, small gifts or major donors, a treasurer or a whole board that signs off. Book 20 minutes with our team and we'll map how you'd accept USDC and USDT on your GiveWP forms: accepted tokens and networks, the wallet your organization controls, the render mode, and a staging donation before you go live. Non-custodial, to a wallet you control. Want the bigger picture first? Read crypto donations for churches and nonprofits or how to accept crypto donations as a creator.
If the calendar does not load, book directly here · [email protected]
This article is general information, not legal, tax or financial advice. The plugin is provided under GPL-2.0-or-later in its repository; test it on staging before using it in production. GiveWP behaviour described here comes from GiveWP 4.18.0 and its documentation as of 5 October 2026 and may change with new releases. Rules on accepting, valuing and receipting crypto donations, and on sanctions screening, vary by jurisdiction; confirm them with your own advisers.