This recipe describes patterns that apply across the event and auction platform category. Specific platforms (Greater Giving, OneCause, BiddingForGood, Handbid, Givebutter, and others) have their own data models — confirm against the specific platform’s current documentation when implementing. The Virtuous-side mapping is the durable part.
What’s distinct about event and auction sync
| Concern | Standard donation sync | Event/auction sync |
|---|---|---|
| Transaction composition | One transaction = one donation | One transaction may include ticket + donation + auction item + raffle ticket, each priced and tax-treated differently |
| Tax-deductible portion | Always equals the full gift | Often less than the full transaction — the fair-market value of attendance/items is subtracted |
| Gift type variety | Mostly Cash/Credit/EFT | Adds NonCash (auction items received), with mix of cash and non-cash within one event |
| Event linkage | Optional metadata | Central — every transaction is tied to the specific event |
| Refunds and cancellations | Rare | Common — donors cancel ticket purchases, auction wins can be voided |
Architecture
The architecturally distinct component: the order splitter. Where a Stripe charge maps one-to-one to a Virtuous Gift, an auction-platform order may decompose into three, four, or more Virtuous records. The splitter is the logic that turns a single platform order into the right set of Virtuous submissions.Decomposing an order
A typical gala order from a customer’s auction platform might look like this:| Line | Description | Amount | Treatment |
|---|---|---|---|
| 1 | 2× Gala tickets at $250 each | $500.00 | Ticket — split fair-market value vs. deductible portion |
| 2 | Live auction win: “Weekend in Napa” | $1,200.00 | NonCash item; deductible = winning bid − fair-market value |
| 3 | Silent auction win: “Coffee gift basket” | $80.00 | NonCash item; deductible = winning bid − fair-market value |
| 4 | Cash donation | $500.00 | Standard cash gift; fully deductible |
| 5 | Raffle ticket | $20.00 | Not a gift — not tax-deductible; usually recorded as a separate gift type or skipped |
| Total charged | $2,300.00 |
The splitter pattern
JavaScript
Pattern 1: tickets
A ticket purchase is partially a gift and partially a fair-market-value exchange (the attendee receives dinner, entertainment, etc.). The tax-deductible portion is the ticket price minus the fair-market value of what the attendee receives. The Virtuous data model handles this through giftPremiums — items the donor received in exchange for their gift, with associated fair-market value.JavaScript
deductible = amount - sum(premiums[].quantity × valuePerItem). For two 50 of fair-market value, the deductible portion is 500 charged.
Splitting one order across multiple attendees
If the ticket purchaser bought tickets for guests (different attendees), the purchaser is the donor of record but each attendee may also need a Contact record for event-day check-in, allergies, dietary restrictions. This is event-platform-specific — most platforms capture per-ticket attendee data. Submit Contact Transactions for each attendee separately, then use a custom field or note on the Gift to link them.Pattern 2: auction items
An auction-item purchase has the same structure as a ticket — partially deductible, with the non-deductible portion being the item’s fair-market value. Use the samegiftPremiums pattern:
JavaScript
winningBid - itemFMV. A 400 produces an $800 deductible gift.
Recording donated auction items as NonCash gifts
When a donor contributes an auction item (a vacation, a piece of art, an experience) for the auction to sell, that donation itself is a NonCash gift from the item donor to the nonprofit:JavaScript
Pattern 3: cash donations within an event
A pure cash donation (no fair-market value received) follows the standard pattern — see Create a Donation:JavaScript
giftPremiums — the donor received nothing in exchange, so the full amount is deductible.
Pattern 4: sponsorships
Corporate or individual sponsorships at named tiers (Gold Sponsor, Silver Sponsor, etc.) are a hybrid: part marketing-value (the sponsor’s logo on materials, named recognition during the event) and part charitable gift. Treat them as Gifts with Premiums representing the sponsorship benefits:JavaScript
contactType: "Organization", not as a Household.
Refunds and cancellations
Event and auction transactions are refunded more often than straight donations — attendees cancel before the event, auction wins are voided when the winner doesn’t pay or returns the item. Use the same reversing-transaction pattern from Stripe to Virtuous:JavaScript
Partial refunds
If only one line of a multi-line order is refunded (e.g., the attendee cancelled the auction-item win but kept the tickets and the cash donation), reverse only the affected Gift. The other Gifts remain intact.Event-day registration vs. pre-event purchase
Most event platforms support both pre-event ticket purchases (online, weeks ahead) and day-of registration (walk-up at the venue). Both flow through your integration with the same patterns, but day-of registrations often arrive in batches at the end of the event when the platform reconciles its register. If your customer’s event platform delivers day-of registrations as a batch (rather than per-attendee in real-time), the inbound webhook receiver may need to handle high-burst volume. The standard queue-based architecture handles this naturally — the queue absorbs the burst and the submitter drains at the throttled rate.Common edge cases
A donor gives but doesn’t attend
Sometimes a supporter buys tickets but can’t attend, and explicitly donates the ticket value back to the nonprofit. The order has tickets but no attendees. Two patterns:- Treat the unused tickets as a donation. Submit a cash Gift for the ticket value with no
giftPremiums. The donor’s full payment is deductible because they received no benefit. - Maintain the ticket Gift with a “Unused” tag. Keeps the data symmetric with attended tickets. Less accurate for tax reporting.
A donor with no email
Walk-up attendees who pay cash at the door may not provide an email or any identifier — just a name. The Contact Transaction matching algorithm needs at least some signal to avoid creating endless duplicate “John Smith” records. Two patterns:- Require some identifier. Decline to sync attendees with no email, no phone, and no address.
- Tag and review. Sync as a new Contact with a “Walk-up — Needs Review” tag for the customer’s team to merge against existing records manually.
Multiple attendees per ticket purchase
When the ticket purchaser brought guests, each attendee is a Contact but only the purchaser is the donor on the financial gift. Capture guest Contacts via a separate sync path (often through a check-in app’s data, not the order itself) and link them to the event via the Virtuous Event record.Pledged donations during a paddle raise
Live-event paddle raises produce pledges (verbal commitments at the event) that get charged later. Treat these as Pledges in Virtuous (/api/v2/Pledge/* endpoints) at the time of the raise, then as Gift payments against the pledge when the charge actually processes.
Production readiness checklist
- Each line of a multi-line order produces its own Virtuous Gift submission.
- Tickets use
giftPremiumsto capture the fair-market value of attendance. - Auction-item winning bids use
giftPremiumswith the item’s FMV. - Donated auction items (in-kind gifts) are recorded as separate NonCash Gifts from the item donor.
- Sponsorships at named tiers are linked to the corresponding Premium records.
- Corporate sponsors are created as Organization-type Contacts.
- Premium records are configured in Virtuous before the integration references them.
- Refunds use
POST /api/Gift/ReversingTransactionper-line, not order-level deletion. - Raffle and non-deductible line items are either skipped or recorded with a clear non-deductible designation.
- Walk-up / no-email attendees are flagged for customer review rather than silently creating duplicates.
- Reconciliation queries match the event’s total revenue against the sum of Virtuous Gifts for the event’s Project.
Where to go next
Fundraising Platform to Virtuous CRM
The companion recipe for peer-to-peer fundraising — relevant when your event includes participant fundraisers.
Stripe to Virtuous CRM
The payment-processor recipe that often powers event platforms underneath.
Create a Donation
The base Gift Transaction workflow, including the NonCash and stock-gift variants used for in-kind items.
Donations / Gifts
The Gift data model including premiums, designations, and gift type fields used throughout this recipe.