Skip to content

Gift (akoya_gift)

A Gift is an inbound record of a donation, pledge, bequest, grant receipt, or interfund transfer. It is the central transactional entity in akoyaGO — every dollar that enters the foundation is represented as a gift record, linked to a donor and allocated to one or more funds.

At a glance

Display name Gift
Logical name akoya_gift
Schema name akoya_Gift
Primary ID attribute akoya_giftid
Primary name attribute akoya_giftnum
Entity set name (Web API) akoya_gifts
Ownership UserOwned
Change tracking Enabled
Audit Enabled

The pledge-split pattern

Gifts can be split across up to 12 funds. Columns named akoya_Amount1 through akoya_Amount12 each pair with akoya_Fund1 through akoya_Fund12 (and akoya_EstPledgePayDate1..12 for pledges). A simple cash gift populates only the 1 variant; a complex pledge may populate all twelve. Partners should treat these as an array, not as twelve independent columns.

Web API

GET  {org}/api/data/v9.2/akoya_gifts
GET  {org}/api/data/v9.2/akoya_gifts({giftid})
POST {org}/api/data/v9.2/akoya_gifts
PATCH {org}/api/data/v9.2/akoya_gifts({giftid})

Attributes

Only columns partners typically interact with are listed. System columns (createdon, modifiedon, ownerid, statecode, etc.) and internal data-conversion columns (akoya_dc_*, akoya_importdetail, akoya_importpayload) are omitted. The twelve numbered variants of akoya_Amount, akoya_Fund, and akoya_EstPledgePayDate are documented once as a group.

Core identifiers

Display name Logical name Type Required Max length Description
Gift Number akoya_giftnum String ApplicationRequired 100 Human-readable gift identifier. Primary name attribute. Not an alternate key.
Gift Date akoya_giftdate DateTime (DateOnly) ApplicationRequired Calendar date the gift was received or posted.

Amounts (money)

All money columns are precision 2 and store values in the record's transaction currency (transactioncurrencyid). Each has a system-maintained _Base suffix column in the organization's base currency.

Display name Logical name Description
Total Gift akoya_totalgift Sum of all split amounts on this gift. System-calculated for pledges.
Amount (splits 1–12) akoya_amount1akoya_amount12 Per-fund amount when splitting across multiple funds. akoya_amount1 is always populated.
Paid akoya_paid Amount paid to date against a pledge.
Balance akoya_balance Outstanding balance = akoya_totalgift − akoya_paid.
Commitment akoya_commitment Pledge commitment amount.
Match Amount akoya_matchamount Matching gift amount attached to this gift (see akoya_matchinggift lookup).
Fee Amount akoya_feeamount Transaction fee.
Fee Amount Total akoya_feeamounttotal Sum of all fees attached to this gift.
Gift Adjustment akoya_giftadjustment Manual adjustment amount (positive or negative).
Fair Market Value akoya_fmv FMV per unit for non-cash gifts (e.g., stock).
Fair Market Value (total) akoya_fmvtotal FMV × shares for stock gifts.

Classification picklists

Display name Logical name Required Values
Gift Type akoya_gifttype ApplicationRequired See akoya_gifttype values.
Solicitation Method akoya_giftmethod None Display name diverges from logical name. See akoya_giftmethod values.
Payment Type akoya_giftpaymenttype ApplicationRequired Global option set akoya_giftpaymenttype. Values pending metadata generator.
Gift Range akoya_giftrange None Values pending metadata generator.
Recurrence akoya_recurrence None For recurring-gift tagging. Values pending metadata generator.

Key lookups

Display name Logical name Target Description
Donor akoya_donor akoya_donor Primary donor record associated with this gift. Required for most gift types.
Matching Donor akoya_matchingdonor akoya_donor Donor providing the matching portion.
Matching Gift akoya_matchinggift akoya_gift Self-reference. Points to the gift being matched.
Fund (splits 1–12) akoya_fund1akoya_fund12 akoya_fund Per-split fund allocation. akoya_fund1 is always populated.
Primary Donor Contact akoya_primarydonorcontact contact Primary person record copied from the donor at gift time (snapshot).
Secondary Donor Contact akoya_secondarydonorcontact contact Secondary person (spouse, co-donor).
Payor akoya_payor contact The person who actually tendered the payment (may differ from donor).
Memorial Contact akoya_memorialcontact contact Person being memorialized or honored.
Campaign akoya_campaign campaign Campaign the gift is attributed to.
Campaign Activity akoya_campaignactivity campaignactivity Specific appeal or activity that solicited the gift.
Event akoya_event (confirm) Event linked to the gift.
Interfund Request akoya_interfundrequest akoya_request Source request for interfund transfer gifts.
Proposal akoya_proposal (confirm) Fundraising proposal that produced the gift.
GOdonate Transaction akoya_godonatetransaction (confirm) Source online-donation transaction.

Stock / in-kind gift columns

Populated when the gift is non-cash stock.

Display name Logical name Type
Stock Company akoya_stockcompany String
Stock Symbol akoya_stocksymbol String
Stock Date akoya_stockdate DateTime
Shares akoya_shares String (count)
Stock High akoya_stockhigh Money
Stock Low akoya_stocklow Money
Stock Valuation akoya_stockvaluation Money

Flags and text

Display name Logical name Type Description
Gift Anonymous akoya_giftanonymous Boolean Donor has requested anonymity for this gift.
Formal Acknowledgement akoya_formalacknowledgement Boolean Whether to send a formal tax-receipt letter.
Memorial Note Sent akoya_memorialnotesent Boolean Whether the memorial notification was sent.
Honor akoya_honor String Name of person being honored (for in-honor-of gifts).
Memory akoya_memory String Name of person being memorialized.
Memorial Comment akoya_memorialcomment Memo Free-text memorial notes.
Purpose akoya_purpose String Free-text purpose or restriction note.
Check akoya_check String Check number for check-based payments.
Check Date akoya_checkdate DateTime (DateOnly) Date on the check.
Date Acknowledged akoya_dateacknowledged DateTime When the foundation acknowledged the gift.
Authorize Transaction ID akoya_authorizetransactionid String Authorize.Net transaction reference for credit-card gifts.

Lookups — quick reference

For each lookup, use the navigation property (not the logical name) in $expand.

Logical name Web API value field Navigation property Target entity
akoya_donor _akoya_donor_value akoya_Donor akoya_donor
akoya_matchingdonor _akoya_matchingdonor_value akoya_MatchingDonor akoya_donor
akoya_matchinggift _akoya_matchinggift_value akoya_MatchingGift akoya_gift (self)
akoya_fund1 _akoya_fund1_value akoya_Fund1 akoya_fund
akoya_primarydonorcontact _akoya_primarydonorcontact_value akoya_PrimaryDonorContact contact
akoya_secondarydonorcontact _akoya_secondarydonorcontact_value akoya_SecondaryDonorContact contact
akoya_payor _akoya_payor_value akoya_Payor contact

Choice values

akoya_gifttype values

Label Value Notes
Gift 730850000 Default. Straightforward inbound donation.
Pledge 730850001 Commitment to pay over time.
Bequest 730850002 From a will or estate.
Insurance Policy 730850003 Insurance-policy assignment.
IRA 730850004 Qualified Charitable Distribution from IRA.
Non Gift 730850005 Non-gift transaction (e.g., event ticket revenue).
Grant 100000000 Incoming grant.
Interfund 100000001 Inter-fund transfer (internal accounting).

Mixed option-value prefixes

Some values use the 730850xxx prefix (akoyaGO-specific) and some use the standard Dataverse 100000xxx prefix. Values are not sequential; always reference by the integer exactly, never by position.

akoya_giftmethod values

Partner-facing label: "Solicitation Method" (the schema name is akoya_giftmethod).

Label Value
Annual Report 730850000
Appeal Response 730850001
Event 730850002
Matching 730850003
Newsletter 730850004
Personal Contact 730850005
Unknown/Unsolicited 730850006

akoya_giftpaymenttype, akoya_giftrange, and akoya_recurrence are global option sets; values will be rendered on the Global option sets page once the metadata generator is wired up.

Relationships

One-to-Many (this entity is the referenced/parent)

Schema name Related entity Referencing attribute Description
akoya_gift_akoya_giftpayment akoya_giftpayment akoya_giftid Payment execution records (check, ACH, credit card clearing). Multiple payments per gift for pledges.
akoya_gift_akoya_giftfee akoya_giftfee akoya_giftid Fees attached to this gift.
akoya_gift_akoya_interfundgrants akoya_interfundgrants akoya_giftid Interfund grant distributions sourced from this gift.

Many-to-One (this entity references)

Schema name Referenced entity Lookup attribute Navigation property
akoya_akoya_donor_akoya_gift_Donor akoya_donor akoya_donor akoya_Donor
akoya_akoya_donor_akoya_gift_MatchingDonor akoya_donor akoya_matchingdonor akoya_MatchingDonor
akoya_akoya_gift_akoya_gift_MatchingGift akoya_gift (self) akoya_matchinggift akoya_MatchingGift
akoya_akoya_fund_akoya_gift_Fund1 akoya_fund akoya_fund1 akoya_Fund1
akoya_akoya_fund_akoya_gift_Fund2 akoya_fund akoya_fund2 akoya_Fund2
(Fund3 through Fund12 follow the same naming pattern)
akoya_contact_akoya_gift_PrimaryDonorContact contact akoya_primarydonorcontact akoya_PrimaryDonorContact
akoya_contact_akoya_gift_SecondaryDonorContact contact akoya_secondarydonorcontact akoya_SecondaryDonorContact
akoya_contact_akoya_gift_Payor contact akoya_payor akoya_Payor
akoya_contact_akoya_gift_MemorialContact contact akoya_memorialcontact akoya_MemorialContact

Supported messages

Message Supported
Create
Retrieve
RetrieveMultiple
Update
Delete
Upsert — (no alternate keys; use GET then PATCH)
SetState
Assign

Privileges

Partners integrating via an application user (S2S) need at minimum:

Privilege Purpose
prvReadakoya_gift Read gift records
prvCreateakoya_gift Create gift records
prvWriteakoya_gift Update gift records
prvAppendToakoya_gift Associate child records (payments, fees) to a gift

Examples

Conventions

Examples assume ORG (env URL), access_token (valid bearer), headers (standard Dataverse headers dict), and service (a ServiceClient instance). See Authentication.

Read recent gifts for a donor

GET {org}/api/data/v9.2/akoya_gifts?
  $select=akoya_giftnum,akoya_totalgift,akoya_giftdate,akoya_gifttype&
  $filter=_akoya_donor_value eq {donorid} and statecode eq 0&
  $expand=akoya_Fund1($select=akoya_name),akoya_PrimaryDonorContact($select=fullname,emailaddress1)&
  $orderby=akoya_giftdate desc&
  $top=50
Accept: application/json
OData-Version: 4.0
OData-MaxVersion: 4.0
curl "https://{org}.crm.dynamics.com/api/data/v9.2/akoya_gifts?\$select=akoya_giftnum,akoya_totalgift,akoya_giftdate,akoya_gifttype&\$filter=_akoya_donor_value%20eq%20{donorid}%20and%20statecode%20eq%200&\$expand=akoya_Fund1(\$select=akoya_name),akoya_PrimaryDonorContact(\$select=fullname,emailaddress1)&\$orderby=akoya_giftdate%20desc&\$top=50" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Accept: application/json" \
  -H "OData-Version: 4.0" \
  -H "OData-MaxVersion: 4.0"
r = requests.get(
    f"{ORG}/api/data/v9.2/akoya_gifts",
    params={
        "$select": "akoya_giftnum,akoya_totalgift,akoya_giftdate,akoya_gifttype",
        "$filter": f"_akoya_donor_value eq {donor_id} and statecode eq 0",
        "$expand": "akoya_Fund1($select=akoya_name),akoya_PrimaryDonorContact($select=fullname,emailaddress1)",
        "$orderby": "akoya_giftdate desc",
        "$top": 50,
    },
    headers=headers,
)
gifts = r.json()["value"]
var query = new QueryExpression("akoya_gift") {
    ColumnSet = new ColumnSet("akoya_giftnum", "akoya_totalgift", "akoya_giftdate", "akoya_gifttype"),
    Criteria = {
        Conditions = {
            new ConditionExpression("akoya_donor", ConditionOperator.Equal, donorId),
            new ConditionExpression("statecode", ConditionOperator.Equal, 0)
        }
    },
    Orders = { new OrderExpression("akoya_giftdate", OrderType.Descending) },
    TopCount = 50
};
var gifts = service.RetrieveMultiple(query);

Create a simple cash gift

POST {org}/api/data/v9.2/akoya_gifts
Accept: application/json
OData-Version: 4.0
OData-MaxVersion: 4.0
Content-Type: application/json

{
  "akoya_giftnum": "G-2026-00123",
  "akoya_giftdate": "2026-04-24",
  "akoya_gifttype": 730850000,
  "akoya_amount1": 1000.00,
  "akoya_totalgift": 1000.00,
  "akoya_Donor@odata.bind": "/akoya_donors({donorid})",
  "akoya_Fund1@odata.bind": "/akoya_funds({fundid})"
}
curl -X POST "https://{org}.crm.dynamics.com/api/data/v9.2/akoya_gifts" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Accept: application/json" \
  -H "OData-Version: 4.0" \
  -H "OData-MaxVersion: 4.0" \
  -H "Content-Type: application/json" \
  -d '{
    "akoya_giftnum": "G-2026-00123",
    "akoya_giftdate": "2026-04-24",
    "akoya_gifttype": 730850000,
    "akoya_amount1": 1000.00,
    "akoya_totalgift": 1000.00,
    "akoya_Donor@odata.bind": "/akoya_donors({donorid})",
    "akoya_Fund1@odata.bind": "/akoya_funds({fundid})"
  }'
r = requests.post(
    f"{ORG}/api/data/v9.2/akoya_gifts",
    json={
        "akoya_giftnum": "G-2026-00123",
        "akoya_giftdate": "2026-04-24",
        "akoya_gifttype": 730850000,
        "akoya_amount1": 1000.00,
        "akoya_totalgift": 1000.00,
        "akoya_Donor@odata.bind": f"/akoya_donors({donor_id})",
        "akoya_Fund1@odata.bind": f"/akoya_funds({fund_id})",
    },
    headers={**headers, "Content-Type": "application/json"},
)
var gift = new Entity("akoya_gift");
gift["akoya_giftnum"] = "G-2026-00123";
gift["akoya_giftdate"] = new DateTime(2026, 4, 24);
gift["akoya_gifttype"] = new OptionSetValue(730850000);
gift["akoya_amount1"] = new Money(1000.00m);
gift["akoya_totalgift"] = new Money(1000.00m);
gift["akoya_donor"] = new EntityReference("akoya_donor", donorId);
gift["akoya_fund1"] = new EntityReference("akoya_fund", fundId);
var giftId = service.Create(gift);

Find gift then update amount

No alternate keys exist — look up by gift number first, then PATCH by GUID.

GET {org}/api/data/v9.2/akoya_gifts?
  $select=akoya_giftid&
  $filter=akoya_giftnum eq 'G-2026-00123'&
  $top=1
Accept: application/json
OData-Version: 4.0
OData-MaxVersion: 4.0

Then:

PATCH {org}/api/data/v9.2/akoya_gifts({giftid})
Content-Type: application/json
If-Match: *

{
  "akoya_totalgift": 1250.00,
  "akoya_amount1": 1250.00
}
GIFT_ID=$(curl -s "https://{org}.crm.dynamics.com/api/data/v9.2/akoya_gifts?\$select=akoya_giftid&\$filter=akoya_giftnum%20eq%20'G-2026-00123'&\$top=1" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Accept: application/json" \
  | jq -r '.value[0].akoya_giftid')

curl -X PATCH "https://{org}.crm.dynamics.com/api/data/v9.2/akoya_gifts($GIFT_ID)" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "If-Match: *" \
  -d '{"akoya_totalgift": 1250.00, "akoya_amount1": 1250.00}'
r = requests.get(
    f"{ORG}/api/data/v9.2/akoya_gifts",
    params={"$select": "akoya_giftid", "$filter": "akoya_giftnum eq 'G-2026-00123'", "$top": 1},
    headers=headers,
)
hits = r.json()["value"]
if not hits:
    raise LookupError("Gift not found")
gift_id = hits[0]["akoya_giftid"]

requests.patch(
    f"{ORG}/api/data/v9.2/akoya_gifts({gift_id})",
    json={"akoya_totalgift": 1250.00, "akoya_amount1": 1250.00},
    headers={**headers, "Content-Type": "application/json", "If-Match": "*"},
)
var lookup = new QueryExpression("akoya_gift") {
    ColumnSet = new ColumnSet("akoya_giftid"),
    Criteria = {
        Conditions = {
            new ConditionExpression("akoya_giftnum", ConditionOperator.Equal, "G-2026-00123")
        }
    },
    TopCount = 1
};
var result = service.RetrieveMultiple(lookup);
if (result.Entities.Count == 0) throw new InvalidOperationException("Gift not found");

var gift = new Entity("akoya_gift", result.Entities[0].Id);
gift["akoya_totalgift"] = new Money(1250.00m);
gift["akoya_amount1"] = new Money(1250.00m);
service.Update(gift);

Change history

Schema extracted from the Akoyanet solution XML on 2026-04-24. Some lookup targets (marked "confirm"), descriptions, and global option set values are pending the Phase 2 metadata generator.