TH SeedWebs

Donations

Take donations by PromptPay QR for several campaigns, check each slip, send numbered thank-you emails, and keep income and expense books.

Last updated 2026-10-30

Donations is for Thai temples, foundations, schools and associations. Donors pay by PromptPay QR only — there is no card payment. A person on your team checks every slip and confirms it; then the donor gets a numbered thank-you email. Income and expenses are kept in two books.

Turning it on

Donations needs the per-site experimental flag (ask the SeedWebs team), then Settings → General → Features → Donations. Every plan has it, but taking money needs a paid plan. On a trial you can build and preview campaigns and keep the books by hand, but the public form says online donations are not open yet. About a minute after an upgrade the same forms open, with nothing to republish.

The sidebar group Donations holds Overview, Campaigns, Add Campaign, Income and Expenses.

The receiving account

Settings → Payments → Donations (admins only) holds the account donors pay into:

  • the bank and account number;
  • the PromptPay ID — the 13-digit juristic ID is recommended. A scannable preview lets you check the name in your banking app (no need to pay);
  • the bank’s e-Donation QR (upload the image), with its own on/off switch. Only a donor who asks for a tax deduction sees it, before the PromptPay QR;
  • Email admins when a slip lands in the review queue.

Every change to these numbers emails all admins. A campaign can have its own account instead (admins only, in the campaign editor). Until a PromptPay ID is set, the form says donations are not open yet.

Campaigns

Donations → Campaigns lists them; Add Campaign makes one. A campaign has a name, description and page content per language, a cover image, a goal, an end date, a status (Draft, Open, Closed), the amount block (preset amounts, minimum, maximum, a typed amount), the anonymous and tax-deduction switches, and your own fields (the Forms field types, without file upload).

Each campaign has a page at /donate/<slug> (/th/donate/<slug> in Thai) showing its form. A draft opens only with ?preview=1, for a signed-in admin or editor. After the end date (23:59 Bangkok time) the form closes; slips for earlier pledges are still accepted. A page you create at donate/<slug> wins over the campaign, and the editor warns about it. A renamed slug’s old address stops working, with no redirect.

Putting the form on any page

The campaign editor shows its Donation form tag: {{donation_form slug="<slug>"}}. Paste it into a page, a post, a template or the header/footer — anywhere {{form}} works. class="…" adds a class and submit="…" replaces the button label. Written bare, {{donation_form}} means the campaign only on its own page. An unknown slug prints nothing. In an article-mode page the form shows only when the page renders through a page template (the default theme has one); it never shows on an article-mode Home page.

Progress and public lists

Four more tags work wherever the form tag does:

  • {{donation_progress slug="<slug>"}} — amount raised, the goal bar and the donor count;
  • {{donation_donors slug="<slug>" limit="10"}} — the latest donors, only while the campaign’s Donor list is on (amounts only with Show amounts in the donor list). A donor is named only if they did not give anonymously; manual income is listed only with a display name;
  • {{donation_expenses slug="<slug>" limit="10"}} — the total spent and the latest expenses, only while Expense list is on;
  • {{donation_campaigns}} — every Open campaign as a card linking to its page, for your own /donate page.

Figures refresh within a minute of a confirmation, without republishing. Lists show at most 50 rows.

What the donor sees

  1. The form: amount, name, email, “Give anonymously” when allowed, “I want a tax deduction (e-Donation)” when allowed — the 13-digit tax ID, the name on it and a required tick agreeing to send both to the Revenue Department — and your own fields.
  2. After Donate, a private status page with a reference such as DN-20261101-7KQ2, the amount and the QR: PromptPay with the amount filled in, or, for a tax donor when your e-Donation QR is switched on, that QR first (the donor types the amount).
  3. An email with the reference and a link back to that page. It is not a receipt. At most 3 go to one address a day, and they count against your plan’s daily email limit; the page has a Copy link button either way.
  4. The donor pays, then uploads the slip on the same page: JPEG, PNG, GIF or WebP up to 4 MB (an iPhone photo is converted first), at most 3 slips per donation.
  5. The page reads “We are checking your slip with the bank…”, then “Slip received — our staff are checking it”, and later “Donation received — thank you!” with the receipt number (“Checked with the bank.” when the check itself confirmed it). It never says “failed”, and never shows the donor’s name, email, tax ID or slip. A voided donation reads “This pledge is closed — please contact” your site.

Confirming donations

Each slip is checked with the bank through EasySlip (up to 100 checks a site a month, 3 a donation; none on a trial). For now every checked slip still waits for a person: the drawer shows what the bank read — amount, time, sender, bank reference and which of your accounts it matched — so confirming takes one look. Donations that ask for a tax deduction always do. Settings ▸ Payments ▸ Donations lists which accounts are checked automatically. When the check could not run, an admin can press Check with the bank again. Waiting donations are counted on the Income menu item (red badge) and listed in the Review queue on Overview, oldest first; the Needs review card scrolls to it. Admins also get an email at most once an hour while the review box in Settings is ticked.

Review opens a drawer with the pledge, the QR it was shown, the account in force at the time, the answers and every slip. To Confirm donation, enter what the bank actually received (an amount that differs from the pledge is flagged), the date received, and the bank reference — or a note on how you checked when there is none. Tick Paid via the e-Donation QR when the slip shows it; on a tax pledge, tick that the sender on the slip is the taxpayer. Next moves to the next donation. One bank reference can confirm only one donation; it can be reused only when its holder was voided or no longer exists. Use Void, with a reason, for a pledge that was never paid.

On Income, a pledge still awaiting its slip can be confirmed too, once the money is on your statement, and Details opens any form donation read-only. Only admins confirm or void. Confirming also needs an admin signed in — an API token cannot confirm.

The thank-you email

Confirming sends the donor a thank-you numbered like 2569-00001: per site, per Buddhist-era year, in order, never reused. It is the Theme → Emails template email-donation-receipt, with the tags {{site_name}}, {{donor_name}}, {{amount}}, {{campaign_name}}, {{receipt_no}}, {{received_date}} and {{ref}}. It does not count against the email limit. There is no PDF and no tax receipt document.

Books and Overview

Overview shows income, expenses and balance for a period, the review queue, a table per campaign with % of goal, a 12-month chart and Export CSV (never tax IDs). Income and Expenses take manual entries with private attachments; amounts, dates and bank references are locked once saved. Mistakes are voided, never deleted. Totals count received money only; a campaign’s raised figure includes manual income.

The e-Donation export

Overview → e-Donation export (admins) lists the confirmed donations that asked for a tax deduction, by month and campaign; gifts paid through the e-Donation QR are left out, since the bank already reported them. Download CSV gives a file with the full 13-digit IDs for keying into the Revenue Department system. Once keyed, click I have keyed these into RD: those rows then stay out of the next export unless you tick Include rows already keyed into RD.

Roles and privacy

Writers see nothing. Editors read everything, edit campaign text and export the CSV. Admins do the rest. Tax IDs are shown masked to everyone; in the review drawer an admin can click Show full number, which records who looked. The full ID and the e-Donation export need an admin signed in — an API token cannot reach them.

The personal details of a pledge still unpaid 90 days later are cleared (the reference and amount stay); backups keep them until restored. Slip images are kept for one year.

A Backup restore that would undo donation entries asks you to confirm, and used bank references and receipt numbers are never reopened. A Demos import asks too, and keeps the books. Reset empties the books but keeps the used references and the receipt counter.

Not yet

Recurring giving and card payments — see What SeedWebs does not have.