Charitable Documentation

Learn how to make the most of Charitable with clear, step-by-step instructions.

Automation Connect: Visual Automation Builder

Do you want to see exactly what an automation will do before it runs? The Visual Automation Builder gives you a full-screen canvas where every automation is laid out as connected cards, so you can build a complete flow without writing any code.

Available in Pro plans and higher (Pro plugin), with Charitable Automation Connect 2.3.0 or later.

See everything you need to know about the new visual automation builder »

What’s In This Guide?

  1. How the Visual Automation Builder Works
  2. What You Need Before You Start
  3. Canvas View and Simple View
  4. Triggers You Can Choose From
  5. Conditions You Can Add
  6. Actions You Can Run
  7. Building Your First Automation
  8. Merge Tags for Emails and Notes
  9. Applying an Automation to Existing Donors
  10. Testing and Delivery History
  11. Troubleshooting
  12. Developer Reference
  13. FAQs on the Visual Automation Builder

How the Visual Automation Builder Works

Every automation you build has 3 parts, and the canvas shows all 3 as cards joined by connecting lines.

  • Trigger is the event in Charitable that starts the flow, such as a new donation or a cancelled recurring plan. Each automation has one trigger.
  • Conditions are optional rules that decide whether the flow keeps going. You can require that a donation is over a certain amount, or that it came from one campaign.
  • Actions are the things that happen. An automation can run several actions, and they run from top to bottom in the order you arrange them.

Before version 2.3.0, one automation meant one webhook sent to one web address. Now a single donation can tag the donor, add a note to their record, email your team, and send a webhook to your CRM, all from the same automation.

Note: The builder is styled to match the Charitable Campaign Builder, so if you have built a campaign page, the layout will already feel familiar.

What You Need Before You Start

  • The Charitable Pro plugin with an active Pro or Elite plan.
  • Charitable Automation Connect 2.3.0 or later. Version 2.3.1 adds the “Tidy Up” button and the welcome tour described below.
  • WordPress 6.2 or later.
  • Working scheduled tasks on your site. Webhooks, emails, and the backfill all run in the background through Action Scheduler, which is included with the addon.

Important Note: If your license expires, automations keep running for 30 days. After that, delivery stops until you renew, and the reason is written to your Charitable logs.

Canvas View and Simple View

Each automation can be opened in 2 different editors. Both edit the same automation, and you can move between them whenever you like.

  • Canvas View takes over the whole screen. You’ll see a top bar with the automation name, a status control, and a “Save” button, a left column with the Trigger, Conditions, Action, and Info tabs, and the cards themselves on a grid with zoom controls and a small map of the flow.
  • Simple View is the classic form inside the normal WordPress admin, with Basic, Conditions, Payload, and Test & Debug tabs. It is quicker for small edits, and it is the only place you can change which fields go into a webhook payload.

New automations and automations started from a template open in Canvas View. To move between the 2 editors, use the “Simple View” link in the top bar of the canvas, or the “Canvas View” link in the form.

Note: If you have unsaved changes when you switch, you’ll be asked whether to save them first.

Triggers You Can Choose From

There are 21 triggers, grouped into Donations, Recurring Donations, and Campaigns. Each one shows a short line of help text in the trigger picker.

Donations

TriggerWhen it fires
Donation CreatedA new donation is saved.
Donation CompletedA donation moves to the Completed status. Use this one when you only want to act on donations that were paid.
Donation UpdatedAn existing donation is updated.
Donation Status ChangedA donation status changes. The payload also carries the previous and new status.
Donation RefundedA donation is refunded, in full or in part.
Donation TrashedA donation is moved to the trash.
Donation RestoredA donation is restored from the trash.
Donor Created (First Donation)A donor gives for the very first time.

Recurring Donations

TriggerWhen it fires
Recurring Donation CreatedA new recurring plan is set up.
Recurring Donation UpdatedA recurring plan is updated.
Recurring Donation Payment MadeEach renewal payment is taken. The payload includes the renewal number.
Recurring Subscription CancelledA donor or an admin cancels a recurring plan.
Recurring Payment FailedA scheduled charge fails, which is useful for failed payment alerts.
Recurring Donation TrashedA recurring plan is trashed.
Recurring Donation RestoredA recurring plan is restored from the trash.

Campaigns

TriggerWhen it fires
Campaign CreatedA new campaign is published.
Campaign UpdatedAn existing campaign is updated.
Campaign EndedA campaign reaches its end date.
Campaign Goal ReachedA campaign first reaches its goal. The payload includes the amount raised, the goal, and the percentage funded.
Campaign TrashedA campaign is moved to the trash.
Campaign RestoredA campaign is restored from the trash.

Conditions You Can Add

Conditions are optional. If you leave the Conditions tab empty, the automation runs every time its trigger fires.

You can build one or more rule groups, and each group can match ALL of its rules or ANY of them. The rules on offer change with the trigger you picked, so a campaign trigger will not show donor country, for example.

RuleWhat it checks
CampaignWhich campaign the donation was made to.
Donation totalThe value of this donation, more than, less than, or equal to an amount you set.
Lifetime givenEverything the donor has given so far, which is how you build giving levels.
Number of donationsHow many donations the donor has made so far.
Payment gatewayThe gateway that took the payment, such as Stripe or PayPal.
Donation statusThe status of the donation, such as Completed or Pending.
Donor countryThe country on the donation.
Test modeWhether the donation was made in test mode.
Newsletter opt-inWhether the donor ticked your newsletter box.
Anonymous donationWhether the donor chose to give anonymously.
Recurring periodHow often a recurring plan is charged.
Campaign categoryThe category on the campaign.
Campaign creatorThe user who created the campaign.
Building condition groups in the Visual Automation Builder

Pro tip: A “Lifetime given” rule plus a Tag Donor action is all you need for a giving ladder. Set one automation per level, and donors move up on their own as they give.

Actions You Can Run

Version 2.3.0 gives you 4 actions. Three of them run inside Charitable, so there is no outside service to set up.

Several actions in one automation, arranged in order on the canvas

Send Webhook

This action sends the event data to any web address that accepts an HTTP POST request. It is how you connect Charitable to Zapier, Make, n8n, Pabbly Connect, Slack, and your own endpoints.

SettingDefaultWhat it does
Delivery URLemptyRequired. The address that receives the data. Your other tool gives you this URL to paste in.
Request FormatJSONJSON works with almost every tool. Pick Form-encoded only if your endpoint asks for it.
Signing secretauto-generatedOptional. Charitable signs each request with it so the receiver can confirm the request really came from you.
Custom HeadersemptyOptional. Extra headers such as an API key or a bearer token. The content type and signature headers are added for you and cannot be replaced.
Use async deliveryOnSends the request in the background so your donation form is never held up.
Payloadall fieldsThe fields included in each request. Turn off anything the receiver does not need. Payload editing happens in Simple View.

Tag Donor

This action changes a donor’s tags inside Charitable, with no outside service involved. It is the fastest way to build donor groups as donations come in.

SettingDefaultWhat it does
ModeReplace group“Replace group” swaps a tag within one group, for example Bronze to Silver. “Add tag” keeps the tags the donor already has. “Remove tag” takes a tag away.
Tag groupemptyUsed with Replace group. The donor keeps only one tag from this group at a time.
Tag to applyemptyRequired. The tag or tags to apply. Type one and press Enter, and separate several with commas. Tags that do not exist yet are created for you.
Setting up the Tag Donor action in the Visual Automation Builder

Send Email

This action emails the donor, your site admin, the campaign creator, or any address you type in. Your Charitable email settings and any SMTP plugin you use are respected, because the email goes out the same way your receipts do.

SettingDefaultWhat it does
Send toThe donorWho receives the email. Choose the donor, your site admin, the campaign creator, or a custom address.
Email addressemptyShown when you choose a custom address. Merge tags such as {email} work here.
SubjectemptyRequired. Merge tags such as {first_name} work here.
MessageemptyRequired. The body of the email, with an “Insert merge tag” picker beside it.
FormatHTMLSend a designed HTML email or a plain text one.
Use Charitable branded email templateOnWraps your message in your Charitable email template, so it matches your receipts.
Email headlineemptyThe large heading at the top of the branded template. If you leave it blank, your subject line is used.

Add Donor Note

This action adds a note to the donor’s record, stamped with the word Automation and the date, so you can tell automatic notes apart from ones your team wrote. Merge tags work in the note text.

Note: Tag Donor and Add Donor Note can also be run against donors you already have. Send Webhook and Send Email cannot, which keeps you from emailing your whole donor list or flooding an endpoint by accident.

Building Your First Automation

In this walkthrough, you’ll build an automation that tags a donor and tells your team about the gift. The same steps work for any trigger and action you pick.

Step 1. Open the Automations Screen

To get started, head over to Charitable » Automations in your WordPress admin. You’ll see every automation you have, with its trigger, its status, and how its last run went.

Then click “Add Automation” at the top of the page.

The Add Automation button on the Charitable Automations screen

Step 2. Pick a Template or Start From Scratch

You’ll see a set of templates for the tools people connect most often, including Zapier, Make.com, n8n, Pabbly Connect, HubSpot, Mailchimp, and Slack. A template fills in sensible defaults for that tool, and you can change anything afterwards.

For this walkthrough, choose “Start from scratch”.

Choosing an automation template or starting from scratch

The first time you create an automation, a short welcome screen explains triggers, conditions, and actions. From there, you can watch a 2 minute overview video, click “Take the Tour” for a 7 step walk around the builder, or click “Start Building” to go straight in. Tick “Do not show this again” once you know your way around.

The welcome screen with the overview video, tour, and Start Building options

Step 3. Name Your Automation

The name sits in the top bar of the canvas. To rename it, click the name field and type over it, for example “Tag new donors and tell the team”.

Note: If you leave the name blank, one is generated for you. A clear name makes the list much easier to read once you have several automations.

Step 4. Choose Your Trigger

To set what starts the flow, open the Trigger tab in the left column, or click the Trigger card on the canvas. Then pick an event from the list.

For this walkthrough, choose “Donation Completed”, so nothing runs until a payment has actually gone through.

Choosing a trigger event in the Visual Automation Builder

Important: Your trigger decides which actions and which conditions are available. If you change the trigger later, check that the rest of your flow still makes sense.

Step 5. Add Conditions (Optional)

To limit when the automation runs, open the Conditions tab and click “Add Group”. Then choose a rule, an operator, and a value.

A group can match ALL of its rules or ANY of them. Add a second group when you want 2 separate sets of rules to both be able to let the flow through.

For this walkthrough, add “Donation total is greater than 100” and leave it there. To run on every completed donation instead, skip this step.

Step 6. Add Your First Action

To add what happens, click the “Add Action” button on the canvas. The palette opens with the actions that work with your trigger, grouped under Donor, Notifications, and Integrations.

The Add Action button on the automation canvas

Choose “Tag Donor”. A new card appears in the flow, joined to the card before it.

The action palette open on the automation canvas

Step 7. Set Up the Action

To configure a card, click it on the canvas and use the Action tab in the left column. Every field has a short help note beside its label.

For the Tag Donor action, set Mode to “Replace group”, type Giving level as the tag group, and add Major donor as the tag. The donor will now hold only one tag from that group at a time, which is what lets you promote and demote people cleanly.

Step 8. Add More Actions and Put Them In Order

Click “Add Action” again and choose “Send Email”. Set “Send to” to your site admin, write a subject such as New major gift from {first_name} {last_name}, and write your message in the body.

Actions run from the top down, so drag the cards until they are in the order you want. If the layout gets messy, click “Tidy Up” and the cards line up again in a clean row.

Pro tip: Put your in-Charitable actions such as Tag Donor first and your webhook last. That way the donor record is already correct if your webhook sends data to a CRM that reads those tags.

Step 9. Test a Webhook Before It Goes Live

If your automation includes a Send Webhook action, test it before you switch the automation on. Save the automation first, then open Simple View and go to the Test & Debug tab.

You have 2 choices for what to send.

  • Sample data sends made-up values in the right shape, which is enough to set up a Zap or a scenario.
  • Test data sends a real record, either your most recent matching one or a specific record ID, so you see exactly what a live donation would send.

Click “Send Test Payload” and the response appears right there, including the HTTP status code. A test send skips the background queue, so you get the answer immediately. “Preview Payload” shows the data without sending anything.

Step 10. Set the Status and Save

Use the status control in the top bar to set the automation to Active, then click “Save”. The button confirms the save on screen.

Saving an automation and setting its status in the top bar

Only active automations run. Paused and disabled ones are kept exactly as they are, and nothing is dispatched for them.

Step 11. Check Your Automations List

Back on Charitable » Automations your new automation is listed with its name, trigger, status, and a Health column that reads Healthy, Failing, or Never run. Health covers every kind of action, not only webhooks.

The Charitable Automations list showing created automations and their health

From this screen, you can also duplicate an automation, export it to a file, and import one from another site. Imported automations arrive disabled so you can look them over first.

Merge Tags for Emails and Notes

Merge tags are placeholders in curly brackets that are swapped for real values when the automation runs. They work in email subjects, email bodies, custom recipient addresses, email headlines, and donor notes.

The “Insert merge tag” picker beside those fields lists every tag available for the trigger you chose, so you never have to guess a name. Commonly used ones include {first_name}, {last_name}, {email}, {total}, {campaign_name}, {date}, and {donation_id}.

Merge tags use the same field names as the webhook payload, so you only have to learn one set of names for both.

Note: A tag that has no value for a particular run is replaced with nothing rather than printing the raw tag, so write your sentences so they still read well if a field is empty.

Applying an Automation to Existing Donors

New automations only run on things that happen from now on. To catch up your existing donor records, use the “Apply to existing donors” control on a saved automation.

The Apply to existing donors control on a saved automation

You’ll be told roughly how many donors would be affected and asked to confirm. Donors are then processed in the background in batches, and each donor is checked against your conditions before anything runs for them.

Important: Only Tag Donor and Add Donor Note run during this catch up. Send Webhook and Send Email are skipped on purpose, because those donations were not made just now and nobody wants an inbox full of old news.

Testing and Delivery History

Once an automation has run, open it in Simple View and look at the Test & Debug tab. Under “Recent Deliveries” you’ll see the date, the event, whether the run succeeded or failed, and the message that came back.

Each row has a “View payload sent” link so you can see the exact data, and a “Resend” button so you can try a failed delivery again once you have fixed the cause.

Note: If a webhook fails 5 times in a row, the automation is disabled so it stops sending to an address that is not answering. Fix the endpoint, then set the automation back to Active.

Troubleshooting

My Automation Is Not Running

Check the status first, because only active automations run. Then check your conditions, since a rule that never matches will quietly stop everything. Last of all, check that your license is active and on a Pro plan or higher, because delivery is blocked otherwise and the reason is written to Charitable » Tools » Logs.

Webhooks Are Queued But Never Arrive

Webhooks are sent in the background, which depends on your site’s scheduled tasks. Check Tools » Scheduled Actions for stuck or failed jobs in the charitable-automation-connect group. For an immediate result while you are testing, use “Send Test Payload”, or turn off “Use async delivery” on that action.

The Receiving Service Rejects My Requests

If your endpoint checks signatures, make sure it verifies the X-WP-Webhook-Signature header against the same signing secret you set on the action. If it expects form fields rather than JSON, change Request Format to Form-encoded.

Emails Are Not Arriving

The Send Email action uses the same email system as the rest of WordPress, so if your receipts are not arriving either, the problem is your site’s email sending rather than the automation. An SMTP plugin usually fixes it. Also check that the recipient you chose can actually be worked out, since a campaign creator with no email address on file means nothing is sent.

My Older Webhooks Stopped Working After Updating

They should not have. An automation built before 2.3.0 is treated as an automation with one webhook action, so existing Zaps and scenarios keep firing exactly as before, and there is no migration for you to run. If one has stopped, open it and check its status and its delivery history.

Switching Views Lost My Payload Settings

Payload fields are edited in Simple View only, so make your payload changes there and save before you move to the canvas.

The Simple View link in the automation builder top bar
The same automation open in Simple View

Developer Reference

This section covers the parts of Automation Connect 2.3.x that matter if you are extending it, sending data to your own endpoint, or debugging a site. Everything below is namespaced under Charitable\Pro\AutomationConnect and the text domain is charitable-automation-connect.

How an Automation Is Stored

Automations live in the {$wpdb->prefix}charitable_webhook_subscriptions table, reachable through charitable_get_table( 'webhook_subscriptions' ). API keys for the Zapier connection live in {$wpdb->prefix}charitable_api_keys, hashed at rest.

ColumnNotes
eventThe trigger slug. This is the only required column since 2.3.0.
actionsLONGTEXT JSON holding the ordered list of actions. This is where webhook, tag, email, and note configuration now lives.
conditionsLONGTEXT JSON holding the condition groups.
payload_configLONGTEXT JSON holding the payload field selection and ordering.
layoutLONGTEXT JSON holding each automation’s canvas positions, so the builder reopens where you left it.
statusactive, paused, or disabled. Only active dispatches.
failure_countConsecutive failures. Reset to 0 on a successful delivery.
url, secret, content_type, custom_headers, delivery_modePre-2.3.0 single-webhook columns, kept for legacy rows and for the Zapier controller.
managed_bySet when something other than the admin UI owns the row, such as the Zapier app.

Each entry in the actions array has the same shape.

{
  "id": "act_68b2c1f0",
  "type": "tag_donor",
  "enabled": true,
  "mode": "sync",
  "config": { "mode": "replace_group", "group": "Giving level", "tags": ["Major donor"] }
}

The mode key controls dispatch, not action behaviour. Webhook actions default to async and every other action defaults to sync. A legacy row that has a url but no actions is normalized on read into a single webhook action, so old subscriptions dispatch identically without a migration step.

Trigger Event Slugs

SlugLabelPayload type
donation_createdDonation Createddonation
donation_updatedDonation Updateddonation
donation_status_changedDonation Status Changeddonation
donation_completedDonation Completeddonation
donation_refundedDonation Refundeddonation
donation_trashedDonation Trasheddonation
donation_restoredDonation Restoreddonation
donor_createdDonor Created (First Donation)donation
recurring_donation_createdRecurring Donation Createdrecurring_donation
recurring_donation_updatedRecurring Donation Updatedrecurring_donation
recurring_donation_payment_madeRecurring Donation Payment Maderecurring_donation
recurring_donation_trashedRecurring Donation Trashedrecurring_donation
recurring_donation_restoredRecurring Donation Restoredrecurring_donation
subscription_cancelledRecurring Subscription Cancelledrecurring_donation
subscription_payment_failedRecurring Payment Failedrecurring_donation
campaign_createdCampaign Createdcampaign
campaign_updatedCampaign Updatedcampaign
campaign_endedCampaign Endedcampaign
campaign_goal_reachedCampaign Goal Reachedcampaign
campaign_trashedCampaign Trashedcampaign
campaign_restoredCampaign Restoredcampaign

Action Types

SlugLabelPalette groupBackfillableConfig keys
webhookSend WebhookIntegrationsNourl, content_type, secret, custom_headers, payload_config
tag_donorTag DonorDonorYesmode, group, tags
add_noteAdd Donor NoteDonorYesnote
send_emailSend EmailNotificationsNorecipient, custom_email, subject, body, format, use_template, headline

webhook supports every event. tag_donor and add_note support the 10 donor-bearing donation and recurring events. send_email supports those same 10 plus campaign_created, campaign_ended, and campaign_goal_reached.

Actions run in isolation. The runner catches any throwable and turns it into a failed result, so one broken action never stops the others in the list. Every run is recorded through charitable_log() with type set to automation, so results appear in the Charitable logs alongside the automation ID and action type.

Condition Fields

Field IDOperatorsApplies to
campaign_idis, is_not, is_any_ofDonation events
totalgreater_than, less_than, equal_toDonation events
lifetime_totalgreater_than, greater_than_or_equal, less_than, less_than_or_equal, equal_toDonation events plus donation_completed
donation_countgreater_than, greater_than_or_equal, less_than, less_than_or_equal, equal_toDonation events plus donation_completed
donation_gatewayis, is_notDonation and recurring events
statusis, is_notDonation events
countryis, is_not, is_any_ofDonation events
test_modeyes, noDonation and recurring events
newsletter_opt_inyes, noDonation events
anonymous_donationyes, noDonation events
recurring_periodis, is_notRecurring events
campaign_categoryis, is_any_ofCampaign events
campaign_creatoris, is_notCampaign events

A condition that names a field the evaluator does not recognise counts as a misconfiguration and bumps the automation’s failure count, so a broken rule surfaces in the admin rather than failing silently.

Payload Fields

Payloads are flat key and value arrays, built per event type. Merge tags use these same keys.

  • Donation gives you donation_id, title, first_name, last_name, email, address, address_2, address_3, city, state, postcode, country, phone, subtotal, total, date, status, donation_gateway, gateway_transaction_id, test_mode, campaign_id, campaign_name, contact_consent, cover_fees, fee_amount, consent_to_track, newsletter_opt_in, giftaid_claimed, anonymous_donation, and donor_comment.
  • Recurring donation gives you the donor and address fields above plus recurring_donation_id, first_donation_id, recurring_subtotal, recurring_total, recurring_period, recurring_interval, recurring_length, recurring_expiration_date, recurring_renewal_date, gateway_subscription_id, and the GoCardless customer and mandate IDs.
  • Campaign gives you campaign_id, slug, description, goal, end_date, title, date, campaign_creator_id, campaign_creator_name, campaign_creator_email, donated_amount, donor_count, status, permalink, recipient, fundraiser_type, supports_child_campaigns, and the team fields.

Campaign custom fields flagged “Send in Automation Webhooks” are added by name, and they are registered from the donation itself at build time, so they are present for live sends, background sends, and Zapier polling alike. A single field whose value cannot be read falls back to an empty string rather than dropping the whole payload.

Merge tags resolve from the payload first. When there is no payload, which is the case during a backfill, identity tags such as {first_name}, {email}, and the address fields fall back to the donor record. Anything unresolved renders as an empty string.

Webhook Delivery Details

DetailValue
MethodPOST, sent with wp_safe_remote_request()
Timeout60 seconds, with redirects not followed
Bodyapplication/json, or application/x-www-form-urlencoded when Request Format is Form-encoded. Your blog charset is appended.
User agentCharitable/{version} AutomationConnect (WordPress/{wp_version})
X-WP-Webhook-SourceYour site’s home URL
X-WP-Webhook-SignatureSent when a signing secret is set. Base64 of an HMAC over the final encoded body, SHA-256 by default.
Protected headerscontent-type, content-length, host, x-wp-webhook-source, and x-wp-webhook-signature can never be replaced by a custom header.
Custom headersNames must be letters, digits, and hyphens. Carriage returns and line feeds are stripped from values.
SuccessAny 2xx response. Anything else counts as a failure and increments failure_count.

To verify a signature on your side, compute the HMAC over the raw request body exactly as received, using your signing secret, then compare it to the header value.

// PHP, on the receiving endpoint.
$body     = file_get_contents( 'php://input' );
$expected = base64_encode( hash_hmac( 'sha256', $body, MY_CHARITABLE_SECRET, true ) );
$given    = $_SERVER['HTTP_X_WP_WEBHOOK_SIGNATURE'] ?? '';

if ( ! hash_equals( $expected, $given ) ) {
    http_response_code( 401 );
    exit;
}

Note: SSL verification is off by default so that self-signed staging endpoints work. Return false from charitable_automation_connect_allow_unverified_ssl to enforce certificate checks in production.

Background Jobs

Background work runs through Action Scheduler in the charitable-automation-connect group, which you can watch under Tools » Scheduled Actions.

HookArgumentsPurpose
charitable_automation_connect_run_actionautomation ID, action ID, context arrayRuns one action asynchronously.
charitable_automation_connect_deliversubscription ID, payloadLegacy single-webhook delivery, still honoured.
charitable_automation_connect_backfill_batchautomation ID, offset, limitProcesses one batch of existing donors, then queues the next.

Backfill batches are 50 donors at a time, ordered by donor ID, and each batch queues the next until the table is exhausted. Non-backfillable actions are skipped with a recorded reason rather than run.

License Enforcement

License\LicenseGuard::is_delivery_blocked() gates every dispatch path. Delivery is blocked when the Pro plugin is not active, when the plan slug is not pro, agency, or elite, or when the license expired more than 30 days ago. Inside those 30 days delivery continues and a warning is shown in the admin.

A blocked dispatch is written to the Charitable log rather than failing quietly, so an unexpectedly silent site is quick to diagnose.

REST API

The builder talks to the site over the charitable/v1 namespace. These routes require an authenticated admin user, so they are for the editor and for your own admin tooling, not for public integrations.

RouteMethodPurpose
/automationsGET, POSTList and create automations.
/automations/{id}PUT, DELETEUpdate and delete one automation.
/automations/actionsGETAvailable action types with their config schemas.
/automations/{id}/testPOSTSend a test payload and return the response.
/automations/{id}/logsGETDelivery and action history.
/automations/{id}/replayPOSTResend a past delivery.
/automations/{id}/backfillPOSTQueue the “apply to existing donors” sweep.
/automations/{id}/backfill/estimateGETEstimated donor count for the confirmation dialog.
/automations/condition-fields/{event}GETCondition fields for an event.
/automations/payload-fields/{event}GETPayload fields for an event.
/automations/sample-data/{post_type}GETSample records for test sends.

Important Note: The same routes are also registered under the older /webhooks base, which is deprecated and slated for removal one release after 2.3.0. Point new code at /automations.

The Zapier app uses a separate set of routes under /wp-json/charitable/v1/zapier/, authenticated with an API key you create at Charitable » Automations » API Keys. They cover auth/test, subscription create and delete, recent and sample events per event type, campaign, gateway, and category dropdowns, and donor lookups.

Hooks and Filters

HookWhat it does
charitable_automation_connect_actionsFilters the registered action types, so you can add your own action to the palette.
charitable_automation_connect_eventsFilters the registered trigger events.
charitable_automation_connect_event_labelsFilters the slug to label map.
charitable_automation_connect_events_for_editorFilters the event list and help text sent to the builder.
charitable_automation_connect_condition_fieldsFilters the fields offered in the condition builder, per event.
charitable_automation_connect_merge_tagsFilters the merge tags offered for an event.
charitable_automation_connect_payload_fieldsFilters the payload fields offered in the payload editor.
charitable_webhook_donation_payload_fieldsFilters the donation payload field list. Recurring and campaign have matching filters.
charitable_webhook_donation_payload_field_valueFilters a single resolved donation field value. Recurring and campaign have matching filters.
charitable_automation_connect_templatesFilters the starter templates on the template picker.
charitable_automation_connect_zapier_templatesFilters the featured Zap templates, with companion filters for the browse and docs URLs.
charitable_automation_connect_default_editor_modeFilters which editor new automations open in. Return simple to keep the classic form.
charitable_automation_connect_http_argsFilters the outgoing wp_remote_request() arguments.
charitable_automation_connect_secret_keyFilters the signing secret used for a delivery.
charitable_automation_trigger_signature_encrypt_typeFilters the HMAC algorithm, sha256 by default.
charitable_automation_connect_allow_unverified_sslFilters whether certificate verification is skipped.
charitable_automation_allow_unsafe_urlsFilters whether delivery may target a private or local address.
charitable_webhook_subscription_failure_thresholdFilters how many consecutive failures disable an automation, 5 by default.
charitable_automation_connect_recent_eventsFilters the recent events returned to Zapier.
charitable_automation_connect_fire_eventAction you fire to dispatch your own event through the engine.
charitable_automation_connect_startAction fired once the addon has booted.
charitable_automation_connect_enqueue_editor_scriptsAction for enqueuing your own assets into the editor.
charitable_automation_connect_before_list_tableAction fired above the automations list table.

Adding Your Own Action

An action is a class implementing Actions\ActionInterface. Extending Actions\AbstractAction gives you sensible defaults, so you only declare what is different. The config schema you return is what the builder renders, and run() returns an ActionResult.

use Charitable\Pro\AutomationConnect\Actions\AbstractAction;
use Charitable\Pro\AutomationConnect\Actions\ActionContext;
use Charitable\Pro\AutomationConnect\Actions\ActionResult;

class Push_To_Slack_Action extends AbstractAction {

    public function get_slug() {
        return 'my_slack_ping';
    }

    public function get_label() {
        return 'Ping Slack';
    }

    public function get_group() {
        return 'Notifications';
    }

    public function get_supported_events() {
        return array( 'donation_completed', 'campaign_goal_reached' );
    }

    public function is_backfillable() {
        return false; // Never run for every historical donor.
    }

    public function get_config_schema() {
        return array(
            array(
                'key'      => 'channel',
                'type'     => 'text',
                'label'    => 'Channel',
                'tooltip'  => 'The Slack channel that receives the message.',
                'required' => true,
            ),
        );
    }

    public function run( ActionContext $context, array $config ) {
        $extra   = $context->get_extra();
        $payload = isset( $extra['payload'] ) ? $extra['payload'] : array();

        if ( empty( $config['channel'] ) ) {
            return ActionResult::skipped( 'no channel configured' );
        }

        // Do the work here, then report what happened.
        return ActionResult::success( array( 'channel' => $config['channel'] ) );
    }
}

add_filter(
    'charitable_automation_connect_actions',
    function ( $actions ) {
        $action                            = new Push_To_Slack_Action();
        $actions[ $action->get_slug() ]    = $action;
        return $actions;
    }
);

Important: Return false from is_backfillable() for anything that contacts the outside world or sends a message. The backfill sweeper only runs actions that say yes, which is what stops a catch up run from emailing your entire donor list.

Adding Your Own Trigger Event

Register the event so it appears in the trigger picker, then fire it from your own code when the thing happens.

add_filter(
    'charitable_automation_connect_events',
    function ( $events ) {
        $events['my_volunteer_signed_up'] = array(
            'label'        => 'Volunteer Signed Up',
            'description'  => 'Fires when someone signs up to volunteer.',
            'payload_type' => 'donation',
            'group'        => 'Other',
        );
        return $events;
    }
);

// Later, when a volunteer signs up.
do_action( 'charitable_automation_connect_fire_event', 'my_volunteer_signed_up', $object, array( 'source' => 'volunteer-form' ) );

Adding Your Own Condition Field

add_filter(
    'charitable_automation_connect_condition_fields',
    function ( $fields, $event_slug ) {
        $fields['my_donor_region'] = array(
            'label'     => 'Donor region',
            'operators' => array( 'is', 'is_not' ),
            'type'      => 'text',
            'events'    => array( 'donation_created', 'donation_completed' ),
            'callback'  => 'my_evaluate_donor_region', // Receives the object and the rule.
        );
        return $fields;
    },
    10,
    2
);

Keep new automations opening in the classic form with a single filter if that suits your team better.

add_filter( 'charitable_automation_connect_default_editor_mode', function () {
    return 'simple';
} );

FAQs on the Visual Automation Builder

Will my older webhooks keep working after I update?

Yes. An automation built before 2.3.0 is read as an automation with one webhook action, so your existing Zaps and scenarios keep firing exactly as they did. There is no migration step for you to run.

How many actions can one automation have?

There is no set limit. They run from the top of the list down, so put them in the order you want things to happen.

Do I have to use the canvas?

No. Simple View edits the same automation in a classic form, and you can move between the 2 editors whenever you like. Payload field editing happens in Simple View only.

Can I tag donors without connecting an outside service?

Yes. Tag Donor, Add Donor Note, and Send Email all run inside Charitable, so there is nothing to connect and nothing that can break between 2 services.

Why were no webhooks sent when I applied an automation to existing donors?

That is on purpose. A catch up run only does the actions that are safe to repeat on old records, which means Tag Donor and Add Donor Note. Webhooks and emails are skipped, because those donations did not happen just now.

Which plan do I need?

Automation Connect needs the Charitable Pro plugin on a Pro plan or higher. If you are on Lite, you can start with Charitable Lite and upgrade when you are ready to automate.

Can I move an automation to another site?

Yes. Export it from the automations list, then import the file on the other site. Imported automations arrive disabled so you can check them before they run.

Why did my automation switch itself off?

After 5 failures in a row, an automation is disabled so it stops sending to an endpoint that is not answering. Check the delivery history, fix the cause, then set it back to Active.

That’s it! You’ve learned how to build, test, and extend automations with the Visual Automation Builder.

More Documentation

Helpful Links

🤝 Get help when you need it

Connect with Customer Support →  

📑 Find the guide you need

Browse the Documentation Hub →  

⬇️ Download proven strategies, campaign ideas, and expert tools
Get the Fundraising Kit →  

💸 Get Free Fundraising Resources
Head to the Charitable Fundraising Hub

🤔 Got questions about Charitable?
Charitable FAQs

Need help understanding non-profit terms and jargon?
See our Non-Profit Glossary

Still have questions? We’re here to help!

Last Modified:

What's New In Charitable

View The Latest Updates
🔔 Subscribe to get our latest updates
📧 Subscribe to Emails

Email Subscription

Join our Newsletter

We won’t spam you. We only send an email when we think it will genuinely help you. Unsubscribe at any time!

automation update

⚡ Visual Automation Builder: Drag and Drop With No Code!

Charitable Automation Connect 2.3.0 introduces the Visual Automation Builder, a full-screen canvas that lays each automation out as a flow of connected cards: a trigger, optional conditions, and a list of actions that run in order.

🧩 Many actions, one trigger: Tag a donor, send an email, add a note, and fire a webhook from a single event, dragged into any order.

✉️ Act inside Charitable: New Send Email, Tag Donor, and Add Donor Note actions run with no external service required.

🔤 Merge tags: Personalize emails and notes with live fields like {first_name}, {total}, and {campaign_name}.

🔁 Apply to existing donors: Run Tag Donor and Add Donor Note against the donors you already have.

🖥️ Canvas or Simple: Switch views anytime, and automations built before 2.3.0 keep working unchanged.

Read more here.

Integration updated

📬 Introducing Brevo for Charitable: Turn Donors into Subscribers Automatically

The moment a supporter makes a gift is when they are most engaged. With the new Brevo integration for Charitable, you can automatically turn those one-time donors into long-term subscribers without touching a single spreadsheet.

Simply collect donor consent right on your donation form and start your welcome series immediately.

What’s New:

🔄 Automated Subscriber Sync: New donors who opt in are added straight to your Brevo contact list as soon as their payment clears—no manual exports or CSV imports required.

🎯 Granular Consent & Opt-In Control: Customize your checkbox label, choose whether it defaults to checked or unchecked, or turn on Brevo double opt-in to keep your list clean and compliant.

📋 Per-Campaign List Mapping: Route supporters to your global email list or map specific campaigns to targeted Brevo lists to tailor your follow-up messaging.

⚡ 5-Minute Setup: Connect instantly by pasting your Brevo API key into the Newsletter settings, map your contact fields, and start building your email list on autopilot.

Ready to grow your mailing list? Brevo is available now starting on the Charitable Plus plan—connect your account today!

recurring donations updated

💳 Introducing Card Updates: Fix Expired Cards Without Losing Subscriptions!

newExpired or updated credit cards are one of the biggest silent leaks in recurring fundraising. With Card Updates in the Recurring Donations extension, donors can now refresh their payment details directly—keeping their subscription, schedule, and giving history completely intact.

No canceled plans, no lost history, and zero administrative headache for your team.

What’s New:

⚡ 30-Second Self-Service: Donors get a dedicated “Update Card” button in their dashboard that opens Stripe’s secure, PCI-compliant Customer Portal to update card details instantly.

🔒 Scoped & Safe Access: Scoped exclusively to card updates by default, donors can’t accidentally cancel or alter their plans from inside the portal, keeping your webhooks and data in sync.

🤝 Admin-Assisted Support: Helping a donor on the phone? Open their secure Stripe portal in one click from your admin screen or generate a single-use update link to email them.

📋 Automatic Audit Trail: Every payment method update is recorded automatically with a timestamp in both system-wide logs and the individual donor’s profile.

Ready to protect your recurring revenue? Get the Plus or Pro plan and update Recurring Donations to 2.3.0+ and enable “Update Payment Method” under your Settings today!

Integration page builder

Divi Fans Rejoice! Native Divi 5 Campaign Progress Bar Module!

With our new native Divi 5 module, you can anchor your microsites with real-time fundraising stats directly on the visual canvas. Here’s how it works, and why it’s worth turning on today.

Create campaign updates that are VISUAL AND LIVE. You can also:

📊 Campaign Progress Bar: Drop a live progress bar into any Divi 5 layout and show goal progress in real time.

🎨 Deep styling controls: Easily customize the bar and track color, height, and radius to match your brand perfectly.

👁️ Visual Builder ready: Configure and preview everything directly on the Divi canvas as a first-class module.

🔁 Identical rendering: The same exact engine powers this module, meaning consistent design without legacy shims.

✅ Faster launches: Never leave the Divi 5 interface to configure shortcodes or guess how your goal labels will look.

Learn more here.

Integration page builder

👉🏻 New in Charitable: Native Elementor Widgets for Seamless Campaign Building

With native Elementor widgets, you design donation campaigns right alongside the rest of your page without touching code. Here’s how it works, and why it’s worth turning on today.

Create fundraising pages that are VISUAL, NATIVE, AND SHORTCODE-FREE. You can also:

⚡ Mini Donation: Add a compact, high-converting donation widget with preset amounts and full color control.

⏳ Campaign Countdown: Build urgency for a deadline-driven appeal, complete with optional confetti when the goal is hit.

📣 Donation Feed: Prove momentum by showing visitors the social proof of real people giving right now.

🏆 Donor Leaderboard: Celebrate top supporters with gold, silver, and bronze styling to spark friendly giving.

🖼️ Campaign Showcase: Feature multiple campaigns in a landing page grid or carousel, with search, filters, and badges.

Learn more here.