> ## 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.

# Gift Commitment

> Field mapping between WeGive recurring plans and Salesforce GiftCommitment and GiftCommitmentSchedule records

WeGive recurring plans sync to NPC `GiftCommitment` records with `RecurrenceType = OpenEnded`, plus a `GiftCommitmentSchedule` child row that defines amount and cadence. Pledges also use `GiftCommitment` but with a formal commitment type; see [Pledge](/external/onboarding/npc/data-mapping/pledge).

## GiftCommitment fields

| WeGive field | NPC field | Sync | Notes |
| - | - | - | - |
| `source.name` plus amount | `Name` | → | Generated as `Donor Name - $Amount Recurring`. |
| | `RecurrenceType` | → | Always `OpenEnded`. |
| `status` | `Status` | ↔ | See status mapping. |
| `start_date` (next charge) | `NextTransactionDate` | ← | On pull, NPC's next transaction date becomes the plan's next charge date. |

## GiftCommitmentSchedule fields

| WeGive field | NPC field | Sync | Notes |
| - | - | - | - |
| `amount` | `TransactionAmount` | ↔ | Dollars in NPC, cents in WeGive. |
| `frequency` | `TransactionPeriod` plus `TransactionInterval` | ↔ | See frequency mapping. |
| `start_date` | `StartDate` | ↔ | |
| `ends_at` | `EndDate` | ↔ | |
| `source_type` | `PaymentMethod` | → | Uses the payment method mapping. |
| | `Type` | → | Always `CreateTransactions`. |

If a commitment has no schedule, WeGive falls back to the commitment-level `NextTransactionAmount`, `EffectiveTransactionPeriod`, and `EffectiveTransactionInterval`. A new plan with no resolvable amount is skipped.

## Status mapping

NPC commitment statuses map to WeGive plan states. Override under **Status mapping** in [Configuration Options](/external/onboarding/npc/configuration-options#status-mapping).

<Note>
  Push and pull use slightly different maps. On push, WeGive's `cancelled` and `ended` plan states both write NPC `Closed`, and `failing`/`in-arrears` both write `Failing`. On pull, the reverse isn't quite symmetric: NPC `Closed` always becomes WeGive `cancelled` (there's no way back to `ended` specifically), `Lapsed` also maps to `failing` (not just `Failing` itself), and `Draft` maps to `active` rather than being skipped.
</Note>

| NPC `Status` | WeGive plan state | Direction |
| - | - | - |
| Active | active | ↔ |
| Paused | paused | ↔ |
| Closed | cancelled | ↔ |
| Failing | failing | ↔ |
| Lapsed | failing | ← (pull only; WeGive never pushes this value) |
| Draft | active | ← (pull only; WeGive never pushes this value) |

## Frequency mapping

| WeGive frequency | `TransactionPeriod` | `TransactionInterval` |
| - | - | - |
| daily | Daily | 1 |
| weekly | Weekly | 1 |
| biweekly | Weekly | 2 |
| monthly | Monthly | 1 |
| quarterly | Monthly | 3 |
| semi-annual | Monthly | 6 |
| annual | Yearly | 1 |

<Warning>
  **1st-and-15th-of-the-month billing is not supported for NPC** and is blocked at checkout for NPC-connected organizations. NPC's `TransactionPeriod` picklist (Custom/Daily/Weekly/Monthly/Yearly) has no semi-monthly value, and mapping it to Monthly would be indistinguishable from a genuinely-monthly commitment on pull — silently flipping those donors to monthly billing.
</Warning>

## Linkage (create-only)

| WeGive field | NPC field | Notes |
| - | - | - |
| `source.npc_id` | `DonorId` | Account ID of the supporter or company. |
| `campaign.npc_id` | `CampaignId` | |
| `npc_id` | `Id` | `GiftCommitment` ID stored on the plan. |
| `npc_schedule_id` | `Id` | `GiftCommitmentSchedule` ID stored on the plan. |

## Designations

Recurring plan designations use `GiftDefaultDesignation`, which is percentage-based.

| WeGive fund allocation field | NPC `GiftDefaultDesignation` field |
| - | - |
| `amount` (converted to percent of plan amount) | `AllocatedPercentage` |
| `fund.npc_id` | `GiftDesignationId` |
| `scheduled_donation.npc_id` | `ParentRecordId` |

With **Fund allocations** off, the largest default designation maps to the plan's single fund, and WeGive pushes one 100 percent designation.

## Generated gifts

Transactions generated by a recurring plan carry `GiftCommitmentId` on the `GiftTransaction`. WeGive uses this to link each installment to its parent plan.

## Pull filters

When **Sync all recurring donations** is off, only Active commitments are pulled. The **Commitment statuses** filter further limits the pull.


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