This page documents the REST endpoints registered by Fundations FREE (version 2.8.x), the AJAX endpoint used by the donation form, and the meta fields exposed through the WordPress REST API.
Why use the REST API
The REST API lets you read fundraiser and donation data from external systems, mobile apps, or JavaScript running outside the block editor. The custom get-fund/v1 namespace provides gallery management endpoints. Standard WordPress REST API endpoints expose fundraiser and donation records with all registered meta fields.
Custom REST namespace: get-fund/v1
Base URL: /wp-json/get-fund/v1
Fundations registers endpoints in this namespace for webhook handling and gallery management.
PayPal webhook
| Property | Value |
|---|---|
| Method | POST |
| Path | /wp-json/get-fund/v1/paypal-webhook |
| Authentication | None (PayPal posts without credentials) |
| Source | includes/donation/trait-registration.php |
Handles the following PayPal webhook event types:
PAYMENT.CAPTURE.COMPLETED: marks the donation as paid and firesget_fund_donation_paidPAYMENT.CAPTURE.DENIED: marks the donation as failedCHECKOUT.ORDER.VOIDED: marks the donation as cancelled
Gallery endpoints
All gallery endpoints share the same permission callback: the request must be authenticated as a user who holds the edit_post capability on the fundraiser, or whose user ID matches the _get_fund_creator_id meta value on that post.
Read gallery
| Property | Value |
|---|---|
| Method | GET |
| Path | /wp-json/get-fund/v1/actions/{id}/gallery |
| Authentication | Public (no credentials required for reading) |
| Source | includes/class-get-fund-gallery.php |
Returns the gallery image array for a get_fund_action post. Each entry includes id, url, full, thumbnail, medium, large, alt, caption, and title.
Update gallery
| Property | Value |
|---|---|
| Method | POST |
| Path | /wp-json/get-fund/v1/actions/{id}/gallery |
| Authentication | edit_post capability or post creator |
| Source | includes/class-get-fund-gallery.php |
Replaces the gallery image list for the fundraiser.
Delete gallery image
| Property | Value |
|---|---|
| Method | DELETE |
| Path | /wp-json/get-fund/v1/actions/{id}/gallery/{image_id} |
| Authentication | edit_post capability or post creator |
| Source | includes/class-get-fund-gallery.php |
Removes a single image from the gallery by its attachment ID.
PRO-only webhook endpoints
The following endpoints are registered by the fundations-pro plugin. They are not available in the FREE plugin.
| Method | Path | Provider |
|---|---|---|
POST | /wp-json/get-fund/v1/mollie-webhook | Mollie |
POST | /wp-json/get-fund/v1/stripe-webhook | Stripe |
Both endpoints process payment status updates from their respective payment providers and fire get_fund_donation_paid when a payment is confirmed.
Donation form AJAX endpoint
The donation form does not use the REST API. It submits to the standard WordPress AJAX handler.
| Property | Value |
|---|---|
| Action | get_fund_process_donation |
| URL | /wp-admin/admin-ajax.php |
| Method | POST |
| Nonce field | get_fund_donation_nonce |
| Rate limit | 5 requests per IP per 15 minutes (configurable via get_fund_submission_rate_limit filter) |
| Honeypot | Present on every form submission |
This endpoint is not a REST endpoint and does not use the get-fund/v1 namespace. Do not call it as /wp-json/get-fund/v1/donate.
WordPress REST API: post type endpoints
Both the get_fund_action and get_fund_donation post types are registered with show_in_rest = true, which makes them available through the standard WordPress REST API.
| Post type | REST base | Endpoint |
|---|---|---|
get_fund_action | get_fund_action | /wp-json/wp/v2/get_fund_action |
get_fund_donation | get_fund_donation | /wp-json/wp/v2/get_fund_donation |
Standard WordPress authentication and capability checks apply. Only published posts are returned to unauthenticated requests.
Campaign meta fields
Registered on the get_fund_action post type. All fields use show_in_rest = true.
| Field | Type | Description |
|---|---|---|
_get_fund_amount | float | Goal amount |
_get_fund_raised_amount | float | Total donations (kept in sync with the stats table) |
_get_fund_raised_amount_offset | float | Manual adjustment added to the displayed total |
_get_fund_status | string | active, completed, pending, or cancelled |
_get_fund_end_date | string | Expiration date in Y-m-d format |
_get_fund_expired | bool | Set to true when the expiration cron marks the post expired |
_get_fund_creator_id | int | WordPress user ID of the fundraiser creator |
_get_fund_creator_name | string | Display name (stored for guest creators who have no user account) |
_get_fund_creator_anonymous | bool | Whether the creator is displayed anonymously |
_get_fund_is_campaign | bool | true when this is a parent campaign that others may join |
_get_fund_campaign_id | int | Parent campaign post ID for child fundraisers |
_get_fund_team_id | int | Team post ID for team members |
_get_fund_structure_type | string | One of individual, join_team, or create_team |
_get_fund_gallery_images | array | Attachment IDs for the gallery |
_get_fund_updates | array | Campaign updates stored as structured data |
_get_fund_claim_token | string | 30-day token for guest fundraiser claim flow |
Donation meta fields
Registered on the get_fund_donation post type. All fields use show_in_rest = true.
| Field | Type | Description |
|---|---|---|
_get_donation_amount | float | Donation amount |
_get_donation_type | string | Donation type |
_get_donation_action_id | int | Related get_fund_action post ID |
_get_donation_donor_name | string | Full donor name |
_get_donation_donor_first_name | string | First name |
_get_donation_donor_middle_name | string | Middle name |
_get_donation_donor_last_name | string | Last name |
_get_donation_marketing_consent | bool | Whether the donor opted in to marketing |
_get_donation_donor_email | string | Donor email address |
_get_donation_donor_phone | string | Donor phone number |
_get_donation_message | string | Optional message from the donor |
_get_donation_status | string | Payment status: pending, paid, cancelled, failed |
_get_donation_payment_id | string | Transaction ID from the payment provider |
_get_donation_date | string | Donation date |
_get_donation_payment_provider | string | Provider slug: paypal, mollie, stripe, test |
_get_donation_mollie_customer_id | string | Mollie customer ID (PRO) |
_get_donation_mandate_id | string | Mollie mandate ID for recurring (PRO) |
_get_donation_subscription_status | string | Recurring subscription status (PRO) |
_get_donation_next_payment_date | string | Next scheduled payment date (PRO) |
_get_donation_original_donation_id | int | Original donation ID for recurring child donations (PRO) |
Custom donations table
In addition to the WordPress post type, Fundations writes donation records to a custom database table {prefix}get_fund_donations when the custom table is ready. Code that reads donations should use Get_Fund_Donation_Model::is_custom_table_ready() to check whether the table exists before writing to it, and is_using_custom_table() to determine which storage layer to read from. These two checks are distinct: the table can exist without the read-mode flag being enabled.
What you cannot do
- The donation form cannot be submitted via the REST API. It requires the AJAX handler with a valid nonce.
- Mollie and Stripe webhook endpoints are PRO-only. Posting to those paths will return a 404 on a FREE-only installation.
- The
get_fund_donationpost type uses WordPress authentication for write operations. You cannot update donation records without the appropriate capability.