Jump to content

Fundraising/External-facing/Donor Portal

From Wikitech

Donor Portal

The Donor Portal is the interface Donors use in managing their gifts to the Wikimedia Foundation. It was first deployed in April 2026.

A simplified overview of the DonorPortal architecture
An overview of the DonorPortal architecture (image source)

How Donors Access the Portal

Donors access their Donor Account (internally referred to as the Donor Portal) through a secure, personalized link sent to their email address. Each link contains a unique checksum tied to the donor's contact ID that authenticates them automatically — no password is required. Each time a donor successfully loads their dashboard, the system records the access timestamp against their account (last_donor_portal_login).

If a donor reports that their link has expired or is not working, the DonorPortal link can be picked up from the donor record on CiviCRM or direct them to:

  1. Visit the portal login page.
  2. Enter the email address associated with their donation account.
  3. A new secure link will be sent to that address.
  4. Click the link in the email to sign in.

If a donor's contact record has been merged into another record in CiviCRM, the portal automatically detects the merge and loads the surviving contact's data. The donor should not notice any disruption.

Account Dashboard Overview

After signing in, donors land on their account dashboard, organized into three main sections.

Contact Details

Displays the donor's name, mailing address, donor ID, and email address currently on file. If a donor needs to update their contact information, they can use the email preferences link shown in this section.

Donations

Shows all recurring contributions and the most recent one-time donation. Each recurring contribution card displays:

  • The donation amount and frequency (monthly or annual)
  • The payment method on file
  • The status of the donation (see Donation Statuses below)
  • The next scheduled contribution date (for active donations) or the last contribution date (for inactive ones)

Donation History

A full record of all charges processed against the donor's account, separated into two tabs:

  • Annual Fund — contributions to Wikipedia and Wikimedia projects
  • Endowment — contributions to the Wikimedia Endowment

Each row in the table shows the date, donation type, amount, payment method, and refund status (if applicable). The table is paginated with ten entries per page.

Note: Because the CiviCRM database can contain duplicate contact records, the portal aggregates donation history across all contact records that share the same primary email address. A donor whose record was duplicated will see a unified history without needing to take any action. If a donor asks why they see more donations than expected, this de-duplication is likely the reason.

Donation Statuses

Every recurring contribution displays a color-coded status badge. The table below maps each portal-facing status to the underlying CiviCRM status values and indicates whether the donor can take action.

Portal status Underlying CiviCRM status(es) Can the donor modify it?
Active In Progress, Pending, Failing, Overdue Yes - if the payment processor allows self-service (see note below)
Paused In Progress (with pause flag set) Yes
Processing Processing No - check back shortly
Lapsed Failed, Completed No - donor must restart
Cancelled Cancelled (donor-initiated cancel reason) No - donor must restart

Note on modifiability: Even when a donation shows as Active, the Manage Donation button only appears if the payment processor does not manage its own recurring schedule. Donations processed through certain gateways (ex. Legacy PayPal) that control their own schedules cannot be self-served in the portal.

Active

The donation is running normally. Charges will continue on the scheduled date each month or year. This status covers CiviCRM internal states of In Progress, Pending, Failing, and Overdue. So a donation that has encountered a payment failure but has not yet been permanently marked as failed will still appear as Active to the donor while retry attempts are in progress.

Paused

The donor has temporarily suspended their donation. No charges occur during the pause period. A paused donation card looks visually similar to an inactive (Lapsed or Cancelled) donation. The status badge reads "Paused" in plain text rather than the coloured "Active" badge. The next scheduled contribution date shown on the card is the date the payment method will be charged next.

Despite this appearance, a paused donation is still live. The Manage Donation button remains visible, so the donor can still cancel, change their amount, or make other modifications while the donation is paused.

Processing

A change submitted by the donor (a pause, cancellation, or amount update) has been placed on the internal message queue and is waiting to be applied. No further modifications are possible until processing is complete. If a donor contacts donor relations while a donation is in this state, advise them to check back shortly. In most cases this status clears within minutes.

Lapsed

The donation stopped due to a system reason. For example, all payment retries were exhausted or the donation reached a natural end, rather than a deliberate cancellation by the donor. Corresponds to CiviCRM statuses Failed or Completed. No further charges will occur. The donor must restart to resume giving (see Restarting an Inactive Donation).

Cancelled

The donor explicitly cancelled this donation through the portal. The cancellation reason stored in CiviCRM will be one of the donor-initiated cancel reasons. No further charges will occur unless the donor chooses to restart. The full charge history remains visible in Donation History.

Distinguishing Lapsed from Cancelled: Both statuses indicate an inactive donation, but the cause differs. Cancelled means the donor made a deliberate choice. Lapsed means the system stopped the donation, typically after a payment failure. This distinction matters when a donor contacts donor relations asking whether they cancelled — check the CiviCRM status and cancel reason to confirm.

Which Recurring Contributions Are Displayed

The portal shows all active recurring contributions and, separately, the single most recently modified inactive recurring contribution. The rules governing what inactive contributions appear are:

  • If the donor has at least one active recurring contribution, only inactive contributions that were cancelled or deactivated within the last 60 days are eligible to be shown.
  • If the donor has no active recurring contributions, the single most recently modified inactive contribution is shown regardless of age.

This means a donor who cancelled a recurring contribution more than 60 days ago and still has other active donations will not see the old cancelled contribution on their dashboard. If a donor asks why a past recurring contribution is not visible, this display logic is the most likely explanation.

How Changes Are Applied

When a donor submits a change in the portal, the request is placed on an internal message queue rather than applied immediately. A background queue consumer picks up the message, validates it, updates the CiviCRM recurring contribution record, and sends the donor a confirmation email. This is why a donation briefly shows Processing status, which implies that the queue has received the request but has not yet finished applying it.

Every operation produces a CiviCRM Activity record attached to the recurring contribution. These records are the primary audit trail for portal-initiated changes and are searchable in CiviCRM. The table below lists each operation and its corresponding activity type.

Operation CiviCRM activity type
Amount increased Recurring Upgrade
Amount decreased Recurring Downgrade
Pause Recurring Paused
Annual conversion Recurring Annual Conversion
Cancellation Cancel Recurring Contribution

Changes initiated from the cancellation alternatives screen (i.e., the donor chose to pause, reduce amount, or convert rather than cancel) are flagged as is_from_save_flow in the activity record details. This can help distinguish voluntary upgrades or pauses from those taken to avoid cancellation.

Confirmation emails: A transactional email is sent to the donor after every successful change. Amount increases use a dedicated upgrade email template (recurring_upgrade_message). All other operations — pause, downgrade, annual conversion, and cancellation — use the general portal notification template (donor_portal_recurring).

Operations Available in the Portal

Donors can manage active recurring contributions by selecting Manage Donation on a contribution card. This opens the management view, from which the following operations are available.

Donations in Processing, Lapsed, or Cancelled status do not show the Manage Donation button and cannot be modified. Additionally, donations processed through payment gateways that manage their own recurring schedules will not show the button even when Active (see Donation Statuses).

Pause a Donation

The pause feature temporarily stops charges without cancelling the donation. Donors can use this when they need a short break from giving.

Steps the donor takes:

  1. Select Pause Gift from the management view.
  2. Choose a pause duration: 30 days, 60 days, or 90 days.
  3. Confirm the pause.

After confirming, the donor is shown the date their donation is scheduled to resume. The donation restarts automatically on that date. A confirmation email is also sent to the donor.

How the resume date is calculated: The pause duration is added to the donation's existing next scheduled contribution date, not to today's date. For example, if a donation was next due on 15 June and the donor pauses for 30 days, the new scheduled date becomes 15 July. If a donor asks when their donation will resume, this is how to calculate it.

How the portal determines a donation is paused: The portal infers the pause status from the next scheduled charge date. A donation shows as Paused for as long as that date remains more than 31 days away (for monthly donations) or more than 366 days away (for annual donations). Once the scheduled date falls back within that window, as the resume date approaches, the donation automatically returns to Active status and the donor will be charged on that date as normal.

What to tell a donor asking about pausing: A paused donation is not cancelled. It will resume on its own on the date shown; the donor does not need to do anything to restart it.

Change the Donation Amount

Donors can increase or decrease the amount of an active recurring contribution.

Increasing the Amount

  1. The donor selects Change Amount from the management view.
  2. They enter a new, higher amount.
  3. A confirmation screen shows the current amount alongside the new amount, the payment method, and the date the change takes effect.
  4. The donor selects Confirm to apply.

Decreasing the Amount

  1. The donor selects Change Amount, then chooses the option to reduce their amount.
  2. They enter a new, lower amount.
  3. The confirmation screen shows the before-and-after amounts and effective date.
  4. The donor selects Confirm to apply.

The new amount must differ from the current amount. A confirmation email is sent to the donor after the change is applied.

Note: If a donor reports that an amount increase they submitted did not take effect, the most likely cause is a duplicate submission (the queue discards upgrade messages where the net change is zero). Check the CiviCRM activity log for a Recurring Upgrade record; if none is present, the message was discarded and the donor should resubmit.

Switch to an Annual Donation

Monthly donors can convert their recurring contribution to a single annual charge. This option is not available to donors who already give annually.

Steps the donor takes:

  1. Select Switch to Annual from the management view.
  2. Choose one of three amount options:
    • Annual equivalent — the current monthly amount multiplied by twelve
    • Same amount, annually — the same figure charged once per year instead of monthly
    • Custom amount — any amount within the permitted range for the donor's currency
  3. Review the next yearly contribution date shown on screen.
  4. Confirm the selection.

After converting, the contribution card updates to show Annual frequency and the new yearly charge date.

Cancel a Donation

Cancellation is permanent. The portal is designed to offer donors alternatives before they complete a cancellation, which may be useful context when a donor contacts donor relations about wanting to cancel.

Step 1 — Alternatives screen

When a donor selects Cancel Gift, the portal first presents three alternatives:

Alternative What happens
Pause Stops charges for 30, 60, or 90 days; donation restarts automatically
Switch to Annual Converts the monthly donation to a single yearly charge (monthly donors only)
Reduce Amount Lowers the donation to a more comfortable level

The donor can submit any of these alternatives directly from this screen. If none of them applies, they select Continue with Cancellation to proceed.

Step 2 — Cancellation reason

Before the cancellation is finalized, the donor is asked to select the primary reason. The options are:

  • Financial reasons
  • Frequency of charges
  • Prefer to give by a different method
  • No longer want to support
  • Did not intend to set up a recurring donation
  • Other / unspecified

The cancellation is not submitted until a reason is selected and confirmed.

After cancellation

The donor sees a confirmation screen. The recurring contribution card on their dashboard updates to Cancelled status. Donation History continues to show all prior charges. A confirmation email is sent to the donor.

In CiviCRM, the recurring contribution record is updated with a cancel_date, an end_date, and a cancel_reason. The cancel reason is set to the donor's selected reason if one was provided; otherwise it defaults to (auto) User Cancelled via Donor Portal. When verifying in CiviCRM whether a cancellation was donor-initiated, look for this cancel reason value or a Cancel Recurring Contribution activity on the record.

Update Payment Method

If a donor contacts donor relations about updating their payment method, let them know this cannot be done through the portal at this time and would need to create a new recurring contribution through the payments form.

Restarting an Inactive Donation

Donors with a Lapsed or Cancelled donation see a Restart button on that contribution card. Selecting it opens a new donation form pre-populated with the donor's previous preferences (amount, frequency, and country). Submitting the form creates a new recurring contribution, it does not reactivate the old one.

Note: A restarted donation is a brand-new recurring contribution and will have a new contribution recur ID. The previous cancelled or lapsed record remains in Donation History for reference.

Signing Out

Donors sign out by selecting Log Out in the page header. Their secure link becomes inactive after sign-out. To access the portal again, they will need to request a new link via the login page.

Error States

When an operation fails, the portal displays an error screen with a support email address. The table below lists the error codes that may appear internally and their plain-language meaning.

Error code Message shown to Donor (English) What it means
InvalidCredentials Your session has expired. Please login again to access your account. The checksum in the link is invalid or does not match the contact ID; donor should request a new link
no-session Your session has expired. Please reload the Donor Portal and try again. The donor's session has expired
bad-contact-id Something went wrong with your contact details. For assistance, please contact {Donor relations email} The contact ID in the link is not recognized in CiviCRM; donor should contact donor relations
bad-contribution-recur-id Something went wrong with your recurring contribution details. For assistance, please contact {Donor relations email} The contribution recur ID is not recognized in CiviCRM; donor should contact donor relations
(other) Something went wrong, please contact {Donor relations email} A generic failure occurred; the error screen directs the donor to the donor relations email

If a donor reports seeing an error screen, ask for any error message or code shown so the appropriate team can investigate.