Skip to main content
The Raise webhook system supports 15 distinct event types. The OpenAPI spec exposes them as an integer enum ([10, 11, 12, 20, 21, 22, 30, 31, 32, 40, 41, 42, 50, 51, 52]) without labels. This page covers what the integer pattern suggests, the discovery path for confirming the labels, and the practical patterns for subscribing to and handling events.

The 15 event type integers

The full enum from the spec:
The grouping is striking — five tens (10s, 20s, 30s, 40s, 50s) with three consecutive integers in each group. This pattern almost certainly corresponds to 5 resource families × 3 event actions per family.
⚠️ Spec gap: The Raise OpenAPI spec doesn’t label the EventType enum integers. The pattern suggests resource × action semantics (e.g., 10 = gift created, 11 = gift updated, 12 = gift deleted), but the canonical mapping is not documented.The discovery path below identifies labels by inspecting webhook delivery logs — the eventTypeDisplay field on WebhookLogListModel provides the human-readable label for each integer. Subscribe to a broad set of events on a test webhook, generate sample activity, and read the resulting log entries to learn the labels.

The likely resource groups

Based on the integer pattern and the Raise data model, the 5 groups likely correspond to: And the three per-family integers likely correspond to lifecycle actions — typically created, updated, deleted or similar. So 10 would be “gift created”, 11 “gift updated”, 12 “gift deleted” — with the same pattern applying to each family. Treat this mapping as a working hypothesis, not as the spec’s contract. The discovery path below confirms it for any specific event integer your integration cares about.

Discovering the mapping

The WebhookLogListModel schema (returned by GET /api/Webhook/log/list and the per-webhook log endpoints) carries both eventType (integer) and eventTypeDisplay (human-readable label). Inspecting log entries reveals the mapping for each integer that has fired in the customer’s environment.

A discovery script

Run this once against a customer’s webhook subscription to learn the integer-to-label mapping:
JavaScript
The script returns whatever event types have been delivered through the subscription. For a complete mapping of all 15 event types, the customer’s account needs to have generated activity across all 5 resource families with each action type — which may take time to accumulate naturally.

Forcing event generation in a test environment

For development environments where you need to discover the full mapping faster, generate test activity that triggers each event type: Subscribe a test webhook to all 15 integers, trigger the activity, and inspect the resulting logs to learn the labels.

Subscribing to specific events

Once you know which integers correspond to the events your integration cares about, subscribe via the eventTypesList field on the WebhookRequest:
JavaScript
For broad subscriptions that capture all events from a customer:
JavaScript
For most integrations, subscribing to a focused subset is better than subscribing to everything — fewer events to filter, less noise in logs, and clearer integration semantics.

What event payloads contain

The exact payload shape varies by event type. The Raise OpenAPI spec doesn’t document each event’s payload schema explicitly — the schemas come from inspecting actual deliveries via the log endpoints. In general, partner integrations should expect:

Inspecting a real payload

The fastest way to learn an event’s exact shape:
cURL
The single-log response includes payLoad — the exact body delivered to the partner endpoint. Inspect this to understand the JSON structure for the event types your integration handles.

Routing events on the partner side

A common pattern: a single webhook endpoint receives all event types and routes them to per-type handlers based on the event type integer.
JavaScript
Three patterns this gets right:
  • Verify before parsing. Don’t trust the body’s eventType field until the signature has been verified.
  • Acknowledge quickly. Return 200 OK before processing — see Webhooks Overview: What the partner endpoint should do.
  • Tolerate unknown event types. If Raise adds new event types in the future or the customer subscribes to additional types after deployment, your handler should log and skip unknown types rather than throw.

Per-event handling patterns

The specific handlers depend on what your integration does. A few common patterns:

Gift created (likely event 10)

The most common event partners subscribe to — a new donation completed. Typical handlers:
JavaScript

Recurring gift created or cancelled

Useful for partner integrations that maintain donor stewardship state:
JavaScript

Donor updated

Most useful for partner integrations doing two-way sync with an external CRM:
JavaScript

Distinguishing recurring vs. one-time gift events

A common integration question: when a Gift event fires (event 10, likely “Gift Created”), is the gift one-time or one of a recurring schedule’s payments? The answer is in the Gift payload itself: check the recurringGiftId field.
JavaScript
This pattern matters for thank-you flows — donors signing up for recurring giving typically get a “thanks for signing up for monthly support!” email, while donors making subsequent recurring payments get a lighter-touch acknowledgment. Distinguishing the two cases at the integration level produces a better donor experience.

Handling event ordering

Webhook events for the same resource are typically delivered in order — a gift created event arrives before a gift updated event for the same gift. But ordering across resources isn’t guaranteed, and rare delivery hiccups can cause out-of-order arrival. Two patterns help:

Tolerate out-of-order events with state checks

For workflows that depend on event order:
JavaScript
This pattern handles out-of-order updates by upgrading the update to a create if needed.

Use modifiedDate for tie-breaking

When an update event arrives for a record you already have, compare timestamps before applying:
JavaScript
This produces last-writer-wins semantics keyed on modifiedDate rather than on arrival order.

A complete subscription strategy

Pulling the patterns together: for a typical partner integration that needs to react to donation activity, the recommended subscription strategy: A typical partner subscription might cover [10, 11, 20, 21, 22, 30, 31] — the events that drive most donor-and-gift workflows without subscribing to everything.

Where to go next

Webhooks Overview

The full subscription management surface — create, update, delete, inspect logs.

Signature Verification

Validate that incoming requests actually came from Raise.

Idempotency and Safe Reprocessing

Handle duplicate deliveries without side effects.

Retry Behavior

What happens when the partner endpoint doesn’t respond successfully.
Last modified on May 20, 2026