The Campaign record
| Field | Type | Description |
|---|---|---|
id | integer | The Raise primary key. Immutable after creation. |
name | string | Display name of the campaign. |
description | string | Free-text description. |
startDate | string | When the campaign begins. |
endDate | string | When the campaign ends. |
duration | string | Computed display string for the campaign’s duration. |
createdDateTime | string | When the campaign was created in Raise. |
modifiedDateTime | string | When any field on the campaign was last changed. |
Sync configuration
| Field | Type | Description |
|---|---|---|
canSync | boolean | Whether the campaign is configured to sync to downstream products (e.g., CRM+). |
crmKey | string | The campaign’s primary key in the external CRM. |
crmKeyUrls | object | A map of integration types to URL info for linking to the campaign in each external system. |
applySegmentToRecurringGifts | boolean | Whether segment attribution applies to recurring gifts generated by this campaign. |
canSync flag is particularly important for customers running CRM+ alongside Raise — it controls whether the campaign and its gifts surface in CRM+ at all. See How Raise Data Flows to CRM+ for details.
Goal tracking
| Field | Type | Description |
|---|---|---|
givingGoal | number | The dollar amount the campaign aims to raise (in base currency). |
givingGoalFormatted | string | The goal pre-formatted for display. |
hasGivingGoal | boolean | Whether a giving goal is configured. |
raisedAmount | string | The amount raised against the goal. |
raisedPercentage | number | The percentage of the goal achieved (0–100). |
totalGiftGoal | integer | The target count of gifts. |
hasTotalGiftGoal | boolean | Whether a gift-count goal is configured. |
totalGifts | integer | The actual count of gifts received. |
totalGiftsPercentage | number | The percentage of the gift-count goal achieved. |
totalDonors | integer | The count of distinct donors who have given. |
averageGiftGoal | number | The target average gift amount. |
averageGiftGoalFormatted | string | The target pre-formatted for display. |
hasAverageGiftGoal | boolean | Whether an average-gift goal is configured. |
averageGiftAmount | string | The actual average gift amount, formatted. |
totalVisitors | integer | The count of unique visitors to the campaign’s forms. |
conversionRate | string | The visitor-to-donor conversion rate as a percentage string. |
Reading Campaigns
| Pattern | Endpoint | Use |
|---|---|---|
| List all | GET /api/Campaign/list | Paginated list of all campaigns |
| Query by filter | POST /api/Campaign/query | Advanced filtering — see Pagination and Filtering |
| Get by ID | GET /api/Campaign/{id} | Single campaign with full detail |
Filter, Skip, Take, SortBy, Descending, IncludeDetails parameters described in Pagination and Filtering.
Reading campaigns for analytics
For partner integrations building campaign-progress dashboards, the goal-tracking fields onCampaignModel give you everything you need in a single call per campaign:
JavaScript
Creating and updating Campaigns
Create
cURL
id.
Update
PUT /api/Campaign/{id} updates an existing campaign. Send the full record:
cURL
Delete
cURL
dependency-count endpoint to check before attempting deletion — see Checking dependencies below.
Special operations
Toggle sync
PUT /api/Campaign/{campaignId}/toggle-sync enables or disables the campaign’s CRM sync without requiring a full update:
cURL
canSync because it’s a single-purpose operation — no risk of inadvertently changing other fields. Use it whenever the customer needs to pause or resume sync for a specific campaign.
When sync is disabled (canSync: false):
- New gifts created against this campaign continue to flow into Raise normally.
- Those gifts do not propagate to CRM+ via the platform sync.
- Existing gifts already synced to CRM+ remain there — toggle-sync doesn’t retroactively remove records.
Replace
PUT /api/Campaign/replace migrates dependencies (Segments, Forms, Gifts) from one campaign to another:
cURL
replace moves them in a single atomic operation.
After the replace completes, the source Campaign typically has no dependencies left and can be safely deleted.
Confirm the exact request body shape for
PUT /api/Campaign/replace against the live API. The spec’s endpoint description says “Replace a campaign with another campaign for its dependencies” but the body structure for source/target identification isn’t detailed in the schema.Checking dependencies
cURL
Campaign lifecycle in practice
A typical Campaign goes through a small number of states over its lifetime:| State | What it means | Indicators |
|---|---|---|
| Active | The campaign is open for donations | Current date between startDate and endDate; forms accept submissions |
| Closed | The campaign’s giving window has ended | Current date after endDate; forms may still be visible but typically redirected |
| Archived | The campaign is no longer in active use | (No explicit field — customers typically delete or stop syncing) |
isArchived flag on Campaigns the way it does on Donors. Campaigns past their endDate continue to exist with their historical data; the customer chooses whether to delete them (via the API or admin UI) or leave them in place for historical reporting.
Common patterns
Campaign-by-name lookup
A frequent partner pattern: looking up a Campaign by name rather than ID. The Raise API doesn’t expose a dedicated lookup-by-name endpoint, but the Query endpoint handles it:JavaScript
GET /api/Query/options/{queryType} — see Pagination and Filtering: Discovering query options.
Active-campaigns cache
Most partner integrations need a current list of active campaigns. Cache the result at startup and refresh on a slow cadence:JavaScript
Where to go next
Recurring Gifts
The other core resource — recurring donation schedules.
How Raise Data Flows to CRM+
The platform-level sync controlled by the
canSync flag.Donation Forms
The forms that sit under Campaigns and Segments.
Statuses and Lifecycle States
The lifecycle states that apply to Campaigns, Gifts, and RecurringGifts.