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_amount1 … akoya_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_fund1 … akoya_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:
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.