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

# Events, Tickets & Registrations

> Detailed mapping documentation for WeGive Events, Tickets, and Registrations to Salesforce custom objects

# Campaign Events, Tickets & Registrations - Field Mapping

**Salesforce Objects:**

* `wegive__Event__c` (custom object - Events)
* `wegive__Event_Ticket__c` (custom object - Tickets)
* `wegive__Event_Registration__c` (custom object - Registrations)

**WeGive Models:**

* CampaignEvent
* CampaignEventTicket
* CampaignEventRegistration

## Overview

This document describes how event, ticket, and registration data syncs between WeGive and Salesforce. These objects work together to manage event-based fundraising:

* **Campaign Events** - Define the event details, location, dates, and settings
* **Event Tickets** - Define ticket types, pricing, and availability for an event
* **Event Registrations** - Track who registered for which tickets and in what quantities

**Note:** These features require the WeGive managed package to be installed in Salesforce, which includes the custom event objects.

***

# Part 1: Campaign Events

**Salesforce Object:** `wegive__Event__c`\
**WeGive Model:** CampaignEvent

## How Campaign Event Data Syncs

### Direction

* **Import from Salesforce** - Data imports from Salesforce into WeGive only
* **Export to Salesforce** - Data exports from WeGive to Salesforce only
* **Both Ways** - Data syncs in both directions

### Mapping Types

* **Hard-coded** - Built into the integration logic and cannot be changed

***

## Sync Triggers - Events

### From WeGive to Salesforce (Export)

Campaign Event data is exported from WeGive to Salesforce when:

* **Event Created:** A new event is created in WeGive
* **Event Updated:** An existing event is modified in WeGive (e.g., name changed, dates updated, location changed, settings modified)

The export happens automatically after the create or update action in WeGive.

### From Salesforce to WeGive (Import)

Campaign Event data is imported from Salesforce to WeGive based on:

* **Last Modified Date:** WeGive periodically polls Salesforce for Events that have been modified since the last sync
* **Sync Frequency:** The integration checks for updated Events on a scheduled basis (frequency varies by integration configuration)
* **Modified Field Tracking:** Only Events with a `LastModifiedDate` newer than the last successful sync are pulled into WeGive

***

## Complete Field Mapping - Events

| Salesforce Field                                  | WeGive Field               | WeGive API Field                   | Direction              | Type       | Notes                                            |
| :------------------------------------------------ | :------------------------- | :--------------------------------- | :--------------------- | :--------- | :----------------------------------------------- |
| Id                                                | Salesforce ID              | salesforce\_id                     | Import from Salesforce | Hard-coded | Salesforce's unique identifier for this event    |
| Name                                              | Event Name                 | name                               | Both Ways              | Hard-coded | Display name of the event                        |
| wegive\_\_WeGive\_Id\_\_c                         | WeGive Event ID            | id                                 | Export to Salesforce   | Hard-coded | WeGive's unique identifier                       |
| wegive\_\_Description\_\_c                        | Description                | description                        | Both Ways              | Hard-coded | Detailed description of the event                |
| wegive\_\_Location\_\_c                           | Location Type              | location                           | Both Ways              | Hard-coded | "irl" (in-person) or "virtual"                   |
| wegive\_\_Location\_Address\_\_c                  | Location Address           | location\_address.full             | Both Ways              | Hard-coded | Full physical address for in-person events       |
| wegive\_\_Location\_URL\_\_c                      | Location URL               | location\_url                      | Both Ways              | Hard-coded | Virtual event URL/link                           |
| wegive\_\_Start\_Date\_\_c                        | Start Date                 | start\_date                        | Both Ways              | Hard-coded | Event start date                                 |
| wegive\_\_End\_Date\_\_c                          | End Date                   | end\_date                          | Both Ways              | Hard-coded | Event end date                                   |
| wegive\_\_Timezone\_\_c                           | Timezone                   | timezone                           | Both Ways              | Hard-coded | Event timezone                                   |
| wegive\_\_Slug\_\_c                               | URL Slug                   | slug                               | Both Ways              | Hard-coded | URL-friendly identifier                          |
| wegive\_\_Access\_Type\_\_c                       | Access Type                | access\_type                       | Both Ways              | Hard-coded | Public or private event                          |
| wegive\_\_Max\_Capacity\_\_c                      | Max Capacity               | max\_capacity                      | Both Ways              | Hard-coded | Maximum number of attendees                      |
| wegive\_\_Has\_Tickets\_\_c                       | Has Tickets                | has\_tickets                       | Both Ways              | Hard-coded | Whether tickets are available                    |
| wegive\_\_Ask\_Donations\_\_c                     | Ask for Donations          | ask\_donations                     | Both Ways              | Hard-coded | Whether to ask for donations during registration |
| wegive\_\_Company\_Registrations\_\_c             | Allow Company Registration | company\_registrations             | Both Ways              | Hard-coded | Whether companies can register                   |
| wegive\_\_One\_Ticket\_Per\_Person\_\_c           | One Ticket Per Person      | one\_ticket\_per\_person           | Both Ways              | Hard-coded | Limit one ticket per registrant                  |
| wegive\_\_Show\_Registration\_Activity\_\_c       | Show Registration Activity | show\_registration\_activity       | Both Ways              | Hard-coded | Display recent registrations                     |
| wegive\_\_Show\_View\_Events\_\_c                 | Show View Events           | show\_view\_event                  | Both Ways              | Hard-coded | Display event details publicly                   |
| wegive\_\_Show\_View\_Tickets\_\_c                | Show View Tickets          | show\_view\_tickets                | Both Ways              | Hard-coded | Display ticket options publicly                  |
| wegive\_\_Is\_Opened\_\_c                         | Is Open                    | is\_opened                         | Both Ways              | Hard-coded | Whether registration is currently open           |
| wegive\_\_Require\_Registration\_Waiver\_\_c      | Require Waiver             | require\_registration\_waiver      | Both Ways              | Hard-coded | Whether attendees must sign a waiver             |
| wegive\_\_Registration\_Success\_Title\_\_c       | Success Title              | registration\_success\_title       | Both Ways              | Hard-coded | Title shown after successful registration        |
| wegive\_\_Registration\_Success\_Description\_\_c | Success Description        | registration\_success\_description | Both Ways              | Hard-coded | Message shown after successful registration      |
| wegive\_\_DS\_Template\_Id\_\_c                   | DocuSign Template ID       | ds\_template\_id                   | Both Ways              | Hard-coded | For waiver/document signing integration          |

## Important Notes - Events

### Location Types

Events can be either in-person or virtual:

* **In-Person (IRL):** Uses `wegive__Location_Address__c` for the physical address
* **Virtual:** Uses `wegive__Location_URL__c` for the meeting/streaming link
* The `location` field determines which location field is populated

### Date and Timezone

Events include timezone information to handle multi-timezone scenarios:

* Start and end dates are formatted as Y-m-d
* Timezone is stored separately to ensure correct local time display
* This allows organizations to manage events across different time zones

### Registration Settings

Multiple boolean settings control event registration behavior:

* `has_tickets` - Whether ticketed registration is available
* `one_ticket_per_person` - Prevents bulk ticket purchases
* `company_registrations` - Allows organization-level registration
* `ask_donations` - Prompts for donations during registration
* `require_registration_waiver` - Requires legal waiver acceptance

### Visibility Settings

Control what information is publicly displayed:

* `show_registration_activity` - Shows recent registrations for social proof
* `show_view_event` - Makes event details publicly visible
* `show_view_tickets` - Makes ticket information publicly visible
* `is_opened` - Whether registration is currently accepting new registrants

### URL Slug

The `slug` field creates a unique URL for the event page:

* Example: `wegive.com/events/annual-gala-2025`
* Slugs must be unique within the organization
* Used for creating shareable event page links

***

# Part 2: Event Tickets

**Salesforce Object:** `wegive__Event_Ticket__c`\
**WeGive Model:** CampaignEventTicket

## How Event Ticket Data Syncs

### Direction

* **Import from Salesforce** - Data imports from Salesforce into WeGive only
* **Export to Salesforce** - Data exports from WeGive to Salesforce only
* **Both Ways** - Data syncs in both directions

### Mapping Types

* **Hard-coded** - Built into the integration logic and cannot be changed

***

## Sync Triggers - Tickets

### From WeGive to Salesforce (Export)

Event Ticket data is exported from WeGive to Salesforce when:

* **Ticket Created:** A new ticket type is created in WeGive
* **Ticket Updated:** An existing ticket is modified in WeGive (e.g., price changed, limit updated, name changed)

**Prerequisites for Creating Tickets:** Before creating a ticket in Salesforce, the integration ensures:

1. **Event exists in Salesforce:** The parent event must have a `salesforce_id`

The integration will automatically push the event if it doesn't have a Salesforce ID yet.

### From Salesforce to WeGive (Import)

Event Ticket data is imported from Salesforce to WeGive based on:

* **Last Modified Date:** WeGive periodically polls Salesforce for Tickets that have been modified since the last sync
* **Sync Frequency:** The integration checks for updated Tickets on a scheduled basis
* **Modified Field Tracking:** Only Tickets with a `LastModifiedDate` newer than the last successful sync are pulled into WeGive

***

## Complete Field Mapping - Tickets

| Salesforce Field                 | WeGive Field        | WeGive API Field     | Direction              | Type       | Notes                                            |
| :------------------------------- | :------------------ | :------------------- | :--------------------- | :--------- | :----------------------------------------------- |
| Id                               | Salesforce ID       | salesforce\_id       | Import from Salesforce | Hard-coded | Salesforce's unique identifier for this ticket   |
| Name                             | Ticket Name         | name                 | Both Ways              | Hard-coded | Display name of the ticket type                  |
| wegive\_\_WeGive\_Id\_\_c        | WeGive Ticket ID    | id                   | Export to Salesforce   | Hard-coded | WeGive's unique identifier                       |
| wegive\_\_Event\_\_c             | Event Salesforce ID | event.salesforce\_id | Both Ways              | Hard-coded | Links to the parent event                        |
| wegive\_\_Event\_WeGive\_Id\_\_c | Event WeGive ID     | event.id             | Export to Salesforce   | Hard-coded | WeGive event ID for reference                    |
| wegive\_\_Description\_\_c       | Description         | description          | Both Ways              | Hard-coded | Description of what the ticket includes          |
| wegive\_\_Price\_\_c             | Price               | price                | Both Ways              | Hard-coded | Ticket price in dollars (WeGive stores in cents) |
| wegive\_\_Limite\_\_c            | Limit               | limit                | Both Ways              | Hard-coded | Maximum number of tickets available              |

## Important Notes - Tickets

### Price Conversion

Ticket prices require conversion between systems:

* **WeGive:** Stores prices in cents as an integer (e.g., 10000 = \$100.00)
* **Salesforce:** Stores prices in dollars as `wegive__Price__c` (e.g., 100.00)
* **On export:** WeGive divides by 100 to convert cents to dollars
* **On import:** Salesforce value is multiplied by 100 to convert to cents

### Ticket Limits

The `limit` field controls ticket availability:

* Set a specific number to limit available tickets
* Can be null for unlimited tickets
* Used to create scarcity and manage capacity
* Decrements as registrations are created

### Event Relationship

Each ticket must belong to an event:

* The `wegive__Event__c` field links to the parent event
* Both the Salesforce ID and WeGive ID are stored for reference
* The integration ensures the event exists before creating tickets

***

# Part 3: Event Registrations

**Salesforce Object:** `wegive__Event_Registration__c`\
**WeGive Model:** CampaignEventRegistration

## How Event Registration Data Syncs

### Direction

* **Import from Salesforce** - Data imports from Salesforce into WeGive only
* **Export to Salesforce** - Data exports from WeGive to Salesforce only
* **Both Ways** - Data syncs in both directions

### Mapping Types

* **Hard-coded** - Built into the integration logic and cannot be changed

***

## Sync Triggers - Registrations

### From WeGive to Salesforce (Export)

Event Registration data is exported from WeGive to Salesforce when:

* **Registration Created:** A new registration is created in WeGive
* **Registration Updated:** An existing registration is modified in WeGive (e.g., status changed, quantity changed)

**Prerequisites for Creating Registrations:** Before creating a registration in Salesforce, the integration ensures:

1. **Event exists in Salesforce:** The parent event must have a `salesforce_id`
2. **Ticket exists in Salesforce:** The ticket being registered for must have a `salesforce_id`
3. **Donor exists in Salesforce:** The registrant must have a `salesforce_id` (Contact ID)

The integration will automatically push these prerequisites if they don't have Salesforce IDs yet.

### From Salesforce to WeGive (Import)

Event Registration data is imported from Salesforce to WeGive based on:

* **Last Modified Date:** WeGive periodically polls Salesforce for Registrations that have been modified since the last sync
* **Sync Frequency:** The integration checks for updated Registrations on a scheduled basis
* **Modified Field Tracking:** Only Registrations with a `LastModifiedDate` newer than the last successful sync are pulled into WeGive

***

## Complete Field Mapping - Registrations

| Salesforce Field                         | WeGive Field           | WeGive API Field      | Direction              | Type       | Notes                                                |
| :--------------------------------------- | :--------------------- | :-------------------- | :--------------------- | :--------- | :--------------------------------------------------- |
| Id                                       | Salesforce ID          | salesforce\_id        | Import from Salesforce | Hard-coded | Salesforce's unique identifier for this registration |
| wegive\_\_WeGive\_Id\_\_c                | WeGive Registration ID | id                    | Export to Salesforce   | Hard-coded | WeGive's unique identifier                           |
| wegive\_\_Contact\_\_c                   | Donor Salesforce ID    | donor.salesforce\_id  | Both Ways              | Hard-coded | Links to the Contact who registered                  |
| wegive\_\_Event\_\_c                     | Event Salesforce ID    | event.salesforce\_id  | Both Ways              | Hard-coded | Links to the event                                   |
| wegive\_\_Event\_Ticket\_\_c             | Ticket Salesforce ID   | ticket.salesforce\_id | Both Ways              | Hard-coded | Links to the specific ticket type                    |
| wegive\_\_Event\_Ticket\_WeGive\_Id\_\_c | Ticket WeGive ID       | ticket.id             | Export to Salesforce   | Hard-coded | WeGive ticket ID for reference                       |
| wegive\_\_WeGive\_Donor\_Id\_\_c         | Donor WeGive ID        | donor.id              | Export to Salesforce   | Hard-coded | WeGive donor ID for reference                        |
| wegive\_\_WeGive\_Event\_Id\_\_c         | Event WeGive ID        | event.id              | Export to Salesforce   | Hard-coded | WeGive event ID for reference                        |
| wegive\_\_Quantity\_\_c                  | Quantity               | quantity              | Both Ways              | Hard-coded | Number of tickets registered                         |
| wegive\_\_Status\_\_c                    | Status                 | status                | Both Ways              | Hard-coded | Registration status                                  |
| wegive\_\_Transaction\_Id\_\_c           | Transaction ID         | transaction\_id       | Both Ways              | Hard-coded | Links to payment transaction if applicable           |

## Important Notes - Registrations

### Registration Status

The `status` field tracks the registration state:

* Common values include: "Registered", "Confirmed", "Cancelled", "Attended"
* Status may be updated as the event approaches and concludes
* Can be used for check-in workflows and attendance tracking

### Quantity Tracking

Registrations can include multiple tickets:

* The `quantity` field indicates how many tickets were registered
* This decrements available ticket inventory
* Allows group registrations under a single contact

### Transaction Linking

Registrations can be linked to transactions:

* If registration requires payment, `transaction_id` links to the WeGive transaction
* This connects event registration to donation/payment processing
* Allows for comprehensive event revenue tracking

### Multiple Registrations

A single contact can have multiple registrations:

* Same contact can register for different ticket types
* Same contact can register multiple times (if settings allow)
* Each registration is a separate record

***

## Event Matching & Create/Update Logic

### When WeGive Exports an Event to Salesforce

**Step 1: Check for Existing Salesforce Event ID**

* If the WeGive event has a `salesforce_id`: The integration **UPDATES** the existing Event record in Salesforce
* If no `salesforce_id` exists: The integration **CREATES** a new Event record in Salesforce

### When Salesforce Exports an Event to WeGive

**Step 1: Check for Existing WeGive Event**

* The integration searches for an existing event by `salesforce_id`
* If found, it updates that event
* If not found, it creates a new event

**Step 2: Import Data**

* All mapped fields are imported
* Boolean values are properly converted
* Dates are parsed and stored appropriately
* Location data is stored based on location type

***

## Ticket Matching & Create/Update Logic

### When WeGive Exports a Ticket to Salesforce

**Step 1: Ensure Event Exists**

* Check if the parent event has a `salesforce_id`
* If not, push the event first

**Step 2: Check for Existing Salesforce Ticket ID**

* If the WeGive ticket has a `salesforce_id`: The integration **UPDATES** the existing Ticket record in Salesforce
* If no `salesforce_id` exists: The integration **CREATES** a new Ticket record in Salesforce

### When Salesforce Exports a Ticket to WeGive

**Step 1: Check for Existing WeGive Ticket**

* The integration searches for an existing ticket by `salesforce_id`
* If found, it updates that ticket
* If not found, it creates a new ticket

**Step 2: Import Data**

* All mapped fields are imported
* Price is converted from dollars to cents
* Event relationship is established

***

## Registration Matching & Create/Update Logic

### When WeGive Exports a Registration to Salesforce

**Step 1: Ensure Prerequisites Exist**

* Check if the event has a `salesforce_id` - if not, push event first
* Check if the ticket has a `salesforce_id` - if not, push ticket first
* Check if the donor has a `salesforce_id` - if not, push donor first

**Step 2: Check for Existing Salesforce Registration ID**

* If the WeGive registration has a `salesforce_id`: The integration **UPDATES** the existing Registration record in Salesforce
* If no `salesforce_id` exists: The integration **CREATES** a new Registration record in Salesforce

### When Salesforce Exports a Registration to WeGive

**Step 1: Find Related Records**

* Find the event in WeGive by matching `wegive__Event__c` to `salesforce_id`
  * If not found, throw an exception
* Find the ticket in WeGive by matching `wegive__Event_Ticket__c` to `salesforce_id`
  * If not found, throw an exception
* Find the donor in WeGive by matching `wegive__Contact__c` to `salesforce_id`
  * If not found, throw an exception

**Step 2: Check for Existing WeGive Registration**

* The integration searches for an existing registration by `salesforce_id`
* If found, it updates that registration
* If not found, it creates a new registration

**Step 3: Import Data**

* All mapped fields are imported
* Links to event, ticket, and donor are established
* Quantity and status are updated

***

## Required Fields

**For Events (WeGive to Salesforce):**

* Name

**For Tickets (WeGive to Salesforce):**

* Name
* wegive\_\_Event\_\_c (Event Salesforce ID)

**For Registrations (WeGive to Salesforce):**

* wegive\_\_Contact\_\_c (Donor Salesforce ID)
* wegive\_\_Event\_\_c (Event Salesforce ID)
* wegive\_\_Event\_Ticket\_\_c (Ticket Salesforce ID)

## Usage in WeGive

Events, Tickets, and Registrations in WeGive are used for:

* **Event Management:** Create and manage fundraising events
* **Ticketing:** Sell tickets with different pricing tiers
* **Registration Tracking:** Track who's attending your events
* **Revenue Management:** Connect registrations to donations and payments
* **Communication:** Send targeted messages to event registrants
* **Check-in:** Manage event day check-in and attendance
* **Reporting:** Analyze event performance and attendance

***

## Usage in Salesforce

Events, Tickets, and Registrations in Salesforce are used for:

* **Event History:** Track constituent participation in events
* **Revenue Attribution:** Link event revenue to campaigns and contacts
* **Engagement Tracking:** Monitor supporter engagement with events
* **Reporting:** Analyze event success and attendance patterns
* **Stewardship:** Follow up with attendees for cultivation
* **Database Segmentation:** Create lists based on event attendance

***

## Best Practices

1. **Create events early** to allow time for promotion
2. **Set clear ticket limits** to manage capacity expectations
3. **Use descriptive ticket names** that clearly explain what's included
4. **Test registration flow** before launching event to public
5. **Set appropriate access types** (public vs. private) based on event needs
6. **Use location fields correctly** - address for in-person, URL for virtual
7. **Monitor registration activity** to gauge interest and adjust as needed
8. **Link to transactions** when registration involves payment
9. **Update status** as registrations move through lifecycle (registered → attended)
10. **Coordinate with campaigns** - connect events to broader fundraising initiatives

***

## Troubleshooting

**Event not syncing:**

* Verify the WeGive managed package is installed
* Check that event has been modified since last sync
* Ensure integration has access to `wegive__Event__c` object

**Ticket not syncing:**

* Verify parent event has a `salesforce_id`
* Check that ticket price is properly formatted
* Ensure integration has access to `wegive__Event_Ticket__c` object

**Registration not syncing:**

* Verify event, ticket, and donor all have Salesforce IDs
* Check that donor is a Contact (individual), not just an Account
* Ensure integration has access to `wegive__Event_Registration__c` object

**Ticket prices don't match:**

* WeGive stores in cents, Salesforce in dollars
* Verify conversion is working (divide by 100)

**Location data missing:**

* Check that correct location field is populated based on location type
* In-person events use `wegive__Location_Address__c`
* Virtual events use `wegive__Location_URL__c`

**Registration prerequisites missing:**

* Sync events, tickets, and donors before creating registrations
* Use cascading sync to automatically push prerequisites
