Skip to main content
A Gift in Raise is a single completed donation. It carries the donation amount, payment processor result, status, project allocations, optional premium and tribute, and references to the donor and (if applicable) the recurring gift schedule that produced it. The most distinctive aspect of the Gift resource: Gifts are not created via POST /api/Gift. The Gift POST and PUT endpoints don’t exist. Donations enter Raise exclusively through the POST /api/Raise/give donation submission path, which processes payment and then creates the Gift record. This page covers both the resource shape and the unique creation flow.

The Gift record

The Gift record has 56 fields covering identity, payment, designation, status, and a number of optional attribution and analytics fields. The most important groups:

Identity and amount

FieldTypeDescription
idintegerThe Raise primary key. Immutable after creation.
amountnumberThe gift amount.
currencystringThe currency code (e.g., "USD").
formattedAmountstringThe amount pre-formatted for display in the donor’s currency.
datestringThe gift date in the donor’s local timezone.
createdDatestringWhen the Gift record was created (typically equals date for live donations).
modifiedDatestringWhen any field on the record was last changed.

Status and capability

FieldTypeDescription
statusinteger enumThe Gift’s processing status.
statusTextstringThe display string for the status.
canRefundbooleantrue if the Gift is eligible for refund through the API.
isAnonymousbooleantrue if the donor opted to give anonymously.
isTestModebooleantrue if the Gift was created in test mode.
status is an integer enum, but the Raise OpenAPI spec doesn’t document the mapping of integer values to status labels. Use statusText for display purposes; for programmatic logic, discover the status enum’s meanings against the live API and store the mapping in your integration.⚠️ Spec gap: Gift status enum values are not documented in the spec. Future spec updates are expected to label these. Until then, partners should rely on statusText and not switch on the integer status directly.

Payment details

FieldTypeDescription
gatewaystringInternal display name of the payment gateway used.
paymentTypestringThe payment method type (credit card, ACH, etc.).
paymentInfostringDisplay string with payment method details (e.g., “Visa ending in 4242”).
transactionIdstringThe payment processor’s transaction reference.
authorizationNumberstringThe gateway authorization number.
donationIdstringAn additional donation-flow identifier.
paymentProviderTransactionUrlstringA URL to view the transaction in the payment processor’s UI.

Designation

FieldTypeDescription
projectsarray of GiftProjectAllocationModelThe breakdown of the Gift across Projects. Each entry specifies a Project and the amount allocated to it.
premiumItemGiftPremiumItemThe single premium item the donor received in exchange (if any). Note: one premium per gift, unlike some donation platforms that allow multiple.
For a single-Project gift, projects[] has one entry for the full amount. For a split gift, multiple entries summing to the gift’s amount.

Donor linkage

FieldTypeDescription
donorIdintegerThe ID of the Donor this Gift belongs to.
donorDonorModelEmbedded donor data (when included in the response).
billingNamestringThe name on the billing payment method.
billingAddressDonorAddressModelThe billing address used for the payment.
shippingAddressDonorAddressModelThe shipping address (used when a premium is shipped).
shippingNamestringThe name for shipping.

Recurring linkage

FieldTypeDescription
recurringGiftIdintegerIf non-null, the ID of the RecurringGift schedule that produced this Gift.
recurringScheduleInfoobjectSummary information about the recurring schedule (when applicable).
A Gift with recurringGiftId set is one payment in a recurring schedule. A Gift without it is a one-time donation.

Tribute

FieldTypeDescription
tributeGiftTributeModelTribute or memorial information — who the gift was given in honor of or memory of. Null for non-tribute gifts.

Campaign and segment attribution

FieldTypeDescription
campaignNamestringThe Campaign this Gift is attributed to.
segmentstringThe Segment code.
segmentNamestringThe Segment’s display name.
motivationstringThe motivation code text.
motivationCodeIdintegerThe MotivationCode’s ID.
motivationCodeNamestringThe MotivationCode’s display name.
motivationCodeGroupIdintegerThe MotivationCodeGroup’s ID.
motivationCodeGroupNamestringThe MotivationCodeGroup’s display name.
formGiftFormModelThe Donation Form that originated this Gift.

Marketing attribution (UTM and analytics)

FieldTypeDescription
googleUtmCampaign, googleUtmContent, googleUtmMedium, googleUtmSource, googleUtmTerm, googleUtmIdstringGoogle UTM tracking parameters captured at the time of donation.
googleGclidstringGoogle Click Identifier — connects a gift back to a specific ad click.
submissionUrlstringThe URL of the page the donor was on when they submitted.
browserInfoobjectBrowser fingerprint information captured during submission.
UTM and Google Click ID tracking is useful for closing the loop on paid acquisition campaigns — partners building donation-attribution analytics use these fields to attribute gifts back to the marketing channel that drove them.

Other fields

FieldTypeDescription
notesstringInternal notes about the Gift.
commentstringDonor-provided comment with the donation.
donorPaidCostsbooleantrue if the donor opted to cover the platform processing fee.
giftAidRequestedbooleantrue if the donor requested UK Gift Aid (tax-relief claim).
virtualTerminalId, virtualTerminalinteger/stringIf the Gift was entered manually through Raise’s Virtual Terminal interface.
currencyExchangeobjectCurrency conversion details when the donation crossed currencies.

Creating a Gift: POST /api/Raise/give

This is the most distinctive aspect of the Raise Gift surface. There is no POST /api/Gift. Every Gift record in Raise originates from a donation submission through POST /api/Raise/give.

Why this design

POST /api/Raise/give isn’t a plain “create a Gift” endpoint — it’s the full donation flow:
  1. Processes the payment through the configured payment gateway using the tokenized paymentMethodId.
  2. Creates or matches the Donor record from the embedded donor information.
  3. Creates the Gift record with the payment result.
  4. Fires the webhook notifying subscribers of the new Gift.
  5. Initiates platform-level sync to downstream products like CRM+.
Each of these steps is tightly coupled — you can’t create a Gift record without payment processing because the gateway response data is part of the record. This is why the spec exposes no general Gift POST.

The request body

POST /api/Raise/give accepts a DonatePaymentRequest:
FieldRequired?Description
amountYesThe donation amount.
paymentMethodIdYesThe tokenized payment method (see test-payment-method generator for dev).
paymentMethodTypeYesThe payment method type (credit card, ACH, PayPal, etc.).
currencyNoCurrency code. Defaults to the organization’s primary currency.
donorNoDonor information for matching/creating the donor record.
projectsNoThe designation breakdown. If omitted, the Gift designates to the form’s default Project.
isRecurringNotrue to set up a recurring schedule.
frequencyNoThe recurring frequency (when isRecurring is true).
startDate / startDateTimeUtcNoWhen the recurring schedule starts.
segment / segmentOverrideCodeNoThe Segment code.
projectOverrideCodeNoOverride the default Project.
premiumIdNoThe Premium the donor selected.
motivationCodeId, motivationCodeGroupIdNoAttribution codes.
gatewayIdNoOverride the payment gateway.
tributeNoTribute information (in honor of, in memory of, etc.).
isAnonymousNotrue if the donor chose to be anonymous.
donorPaidCosts, coverAdminFee, adminFee, adminFeeProjectIdNoFee-coverage configuration.
giftAidRequestedNoUK Gift Aid request flag.
doubleTheDonationCompanyId, doubleTheDonationEnteredTextNoDouble the Donation employer-match integration fields.
googleGclid, UTM fieldsNoMarketing attribution.
isTestModeNotrue for test mode submissions.
nonce, publicId, pageRequestIdNoForm-flow tracking identifiers.
visitorId, sessionId, clientIdNoBrowser session identifiers.
timeZoneNoThe donor’s timezone.
commentsNoDonor-supplied comment.

A minimal request

cURL
curl -X POST https://prod-api.raisedonors.com/api/Raise/give \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 50.00,
    "paymentMethodId": "tok_abc123",
    "paymentMethodType": "CreditCard",
    "donor": {
      "firstName": "Bruce",
      "lastName": "Wayne",
      "email": "bruce@wayne.example"
    },
    "projects": [
      { "projectCode": "GEN-FUND", "amount": 50.00 }
    ]
  }'
The donor-matching algorithm processes the embedded donor block — typically by email — and either creates a new Donor or attaches the Gift to an existing one. See Process a Donation for the end-to-end workflow including donor matching detail and error handling.
The paymentMethodId must be a tokenized payment method, not a raw card number. Raise uses tokenization to keep partner integrations out of PCI scope. For development and testing, use POST /api/Raise/generate-test-payment-method to mint a test token without touching real card data.

Reading Gifts

The Gift resource exposes read endpoints in three patterns:
PatternEndpointUse
List allGET /api/Gift/listPaginated list of all Gifts. Supports the standard /list parameters.
Query by structured filterPOST /api/Gift/queryAdvanced filtering via groups[]/conditions[].
Get by IDGET /api/Gift/{id}A single Gift with full detail.
For reading Gifts associated with a specific Donor, prefer the GET /api/Donor/{donorId}/gifts endpoint — it’s filtered to the donor at the source rather than requiring you to query by donorId.

Custom field values on a Gift

cURL
curl https://prod-api.raisedonors.com/api/Gift/9876/gift-fields \
  -H "Authorization: Bearer YOUR_API_TOKEN"
Returns the custom field responses captured for this Gift — typically values from custom fields on the Donation Form that produced it.

Refunding a Gift

The Gift surface has no PUT /api/Gift/{id} for general updates, but it does support refunds via a dedicated endpoint:
cURL
curl -X POST https://prod-api.raisedonors.com/api/Gift/9876/refund \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 50.00,
    "reason": "Donor requested cancellation"
  }'
A refund initiates the reverse payment flow with the original gateway, returns the funds to the donor’s payment method, and marks the Gift as refunded on the Raise side. The canRefund flag on the Gift indicates eligibility — typically false for Gifts that have already been refunded, settled past the gateway’s refund window, or have other constraints. Partial refunds (refunding less than the full Gift amount) may be supported depending on the gateway. Confirm with the customer’s gateway configuration before relying on partial refund behavior.

Deleting a Gift

cURL
curl -X DELETE https://prod-api.raisedonors.com/api/Gift/9876 \
  -H "Authorization: Bearer YOUR_API_TOKEN"
DELETE /api/Gift/{id} removes a Gift record entirely. Use sparingly — deletion erases the gift’s history and accounting impact. The refund endpoint is the right choice for most “cancel this donation” scenarios because it preserves the audit trail. Deletion is most appropriate for:
  • Test gifts created during development that need cleanup.
  • Genuine data-entry errors caught before any downstream system has acknowledged the gift.
For donations that were successfully processed but need to be reversed, refund instead.

Updating notes on a Gift

Gift notes have a dedicated update endpoint, parallel to the Donor notes pattern:
cURL
curl -X PUT https://prod-api.raisedonors.com/api/Gift/9876/notes \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "notes": "Acknowledged via thank-you email on 2025-01-15" }'
This is the only field-level update available on a Gift through the API. Other field changes (amount corrections, designation reallocations, gateway adjustments) are not exposed as API operations and must be performed by the customer’s staff in the Raise admin UI.

Gift creation paths in practice

To recap the complete creation flow, since this is one of the most-asked questions for partners new to Raise:
ScenarioPath
Donor completes a Raise-hosted donation formThe form’s submit handler calls POST /api/Raise/give
Partner integration embeds a donation form on its own siteThe integration code calls POST /api/Raise/give
Recurring schedule processes a scheduled paymentRaise’s payment processor creates the Gift automatically — no API call needed from your side
Customer’s staff manually records a giftThrough the Raise admin UI, not the API
Customer imports historical giftsThrough Raise’s bulk import tools in the admin UI
There is no API path for partners to create Gifts that bypass POST /api/Raise/give. Integration designs that need “create a Gift record without processing a payment” should route through the customer’s admin team using import tools rather than the API.

Where to go next

Process a Donation

The end-to-end workflow for submitting a donation via POST /api/Raise/give.

Recurring Gifts

The schedule resource that produces Gifts on a regular interval.

Donation Forms

The forms that originate most Gifts — their configuration drives the Gift’s segment, motivation, and form attribution.

Query Gifts by Filters

Read Gifts back out for reporting, reconciliation, or sync.
Last modified on May 20, 2026