> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wegive.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Recurring Plan Payloads

> Recurring-plan fields, model attributes, and pre-save delivery behavior for action 7.

<Warning>
  Action 7 is delivered before the plan is saved. A new plan can have null identifiers or timestamps, and repeated saves can send another snapshot. This is not proof of a persisted new plan or a collected payment. See [Webhook trigger details](/external/onboarding/webhooks#trigger-details-that-affect-reporting).
</Warning>

This serializer starts with the plan’s **entire `attributesToArray()` output**, then adds/overrides the fields below. Therefore it is an open model snapshot, not a fixed small allowlist. The [raw model inventory](/external/onboarding/webhooks/model-attributes) lists the additional declared plan columns. Missing/unassigned attributes can be absent in the pre-save path. Explicit resource fields below override same-named raw attributes, including amount and frequency conversions.

| Key | Data / meaning |
| - | - |
| `bill_on_wegive` | Boolean: whether WeGive owns recurring billing. |
| `name` | Generated display name: donor name, major-unit installment amount, and plan ID. |
| `fund_allocations` | Array of `{id, fund, amount, allocation_for_fees}`. Allocation amount is major units; fund can be a raw model or donor-safe projection. |
| `id` | Plan ID; may be null during a new model’s pre-save delivery. |
| `amount` | Base installment amount divided by 100: major units. |
| `net_amount` | Plan net amount divided by 100: major units. |
| `all_transactions_total` | Total successful transaction amounts divided by 100: major units. |
| `type` | Destination morph type, normally `organization`. |
| `paused_at` | Pause timestamp/null. |
| `deleted_at` | Soft-delete timestamp/null. |
| `destination` | OrganizationTable object or null. |
| `frequency` | Frequency string from the numeric plan code; see map below. |
| `start_date` | Formatted `YYYY-MM-DD` or null. |
| `cover_fees` | Stored fee-coverage flag (normally 0/1; not normalized by this resource). |
| `fee_amount` | Configured fee divided by 100: major units. |
| `last_change_amount` | Last in-place plan amount change divided by 100; major units/null. |
| `campaign_change_amount` | Campaign-associated change amount divided by 100; major units/null. |
| `payment_method_id` | Payment-method ID/null. |
| `payment_method_type` | Payment-method type string/null. |
| `payment_method` | Card, Bank, or UserSimple object for handled method types; otherwise `[]`. |
| `created_at` | Creation timestamp/null; may be unavailable before initial save. |
| `iteration` | Count of successful transactions for the plan. |
| `last_processed` | Cached last-processed timestamp/null. |
| `first_processed` | First processed date/null. |
| `tribute_email` | Dedication recipient email/null. |
| `tribute_name` | Dedication name/null. |
| `tribute_message` | Dedication message/null. |
| `paused_type` | Stored numeric pause type/null: 1 indefinite, 2 one month, 3 three months, 4 six months. |
| `paused_until` | Scheduled end of pause timestamp/null. |
| `pause_initiator` | Initiator string/null, including `payment_failure`, `donor`, or `admin`. |
| `pause_reason` | Stored pause reason/null. |
| `donor` | [DonorTable object](/external/onboarding/webhooks/nested-objects#donortable). |
| `user` | Object with `id`, `email`, `first_name`, `last_name`, or `[]` if no associated user. |
| `anonymous` | Boolean/null. |
| `fund` | Raw Fund model/null; see model-key inventory. |
| `checkout` | Raw Checkout model/null; see model-key inventory. This is not only `{id, name}`. |
| `fundraiser` | Raw Fundraiser model/null. |
| `campaign` | Raw Campaign model/null. |
| `organization_brand` | Object with `id`, `name`, or null. |
| `last_failed_date` | Latest failed transaction’s creation timestamp/null. |
| `paymentMethod` | Legacy camelCase alias for the resolved payment object; null if unavailable (different empty fallback from `payment_method`). |
| `accounts` | Object with `cards[]` (Card objects) and `bank_accounts[]` (Bank objects). |
| `campaign_fundraiser` | Object with `id`, `name`, `slug`, or null. |
| `message` | Object with `id`, `name`, or null. |
| `session_id` | Related checkout session’s numeric ID/null; **not** its UUID. |
| `custom_fields` | Array of `{id, name, type, value, raw_value, editable}`. Values vary by custom-field definition. |
| `external_paypal_subscription_id` | External PayPal subscription identifier/null. |
| `external_management_url` | URL for external plan management/null. |
| `resolved_paypal_connection_id` | Resolved PayPal connection ID/null. |
| `paypal_connection_id` | Stored PayPal connection ID/null. |

## Frequency mapping

The donation webhook’s `scheduled_donation_frequency` is numeric; action 7 and nested donor-facing plans map it to a string.

| Stored code | String |
| - | - |
| 1 | `monthly` |
| 2 | `weekly` |
| 3 | `bimonthly` |
| 4 | `yearly` |
| 5 | `daily` |
| 6 | `quarterly` |
| 7 | `1_and_15` |
| 8 | `semiannual` |

The source map also has an `Unknown` fallback entry; unmapped codes can resolve to null. Retain the actual frequency string rather than treating every recurring plan as monthly.

## Recurring-plan example

Illustrative excerpt of an existing monthly plan. This is not an exhaustive body; see the explicit fields above and [additional model attributes](/external/onboarding/webhooks/model-attributes#scheduleddonation-model-keys).

```json theme={null}
{
  "id": 8101,
  "name": "Jane Example - 25 - 8101",
  "amount": 25,
  "net_amount": 25,
  "fee_amount": 1,
  "cover_fees": 1,
  "frequency": "monthly",
  "start_date": "2026-11-01",
  "bill_on_wegive": true,
  "anonymous": false,
  "iteration": 0,
  "all_transactions_total": 0,
  "payment_method_type": "card",
  "payment_method_id": 7001,
  "paused_at": null,
  "organization_brand": {
    "id": 1,
    "name": "Example Brand"
  },
  "session_id": 9001,
  "custom_fields": []
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.