Skip to content

Fund (akoya_fund)

A Fund is a pool of assets administered by the foundation. Funds are the central accounting unit — gifts flow in, grants and distributions flow out, fees are calculated against fund balances, and spendable amounts are allocated according to the fund's type and instrument. akoyaGO supports nested fund hierarchies (parent/child) and "fund-of-funds" override patterns for fee and spendable routing.

At a glance

Display name Fund
Logical name akoya_fund
Primary ID attribute akoya_fundid
Primary name attribute akoya_fundname
Entity set name (Web API) akoya_funds
Ownership OrganizationOwned
Change tracking Enabled
Audit Enabled (selective)

Web API

GET  {org}/api/data/v9.2/akoya_funds
GET  {org}/api/data/v9.2/akoya_funds({fundid})
POST {org}/api/data/v9.2/akoya_funds
PATCH {org}/api/data/v9.2/akoya_funds({fundid})

Attributes

Identity and classification

Display name Logical name Type Required Max length Description
Fund Name akoya_fundname String ApplicationRequired 100 Display name. Primary name attribute.
Formal Fund Name akoya_formalfundname String None 250 Longer legal/formal name for letters and statements.
Fund Code akoya_fundcode String Recommended 20 Short code — typically the GL chart account.
Fund Class akoya_fundclass Choice ApplicationRequired Operating / Endowment / Nonpermanent. See values.
Fund Type akoya_fundtype Choice ApplicationRequired Donor Advised, Designated Purpose, Agency Endowment, etc. See values.
Fund Instrument akoya_fundinstrument Choice None Vehicle that established the fund (Bequest, Annuity, etc.). See values.
Endowed akoya_endowed Boolean None Principal is permanently restricted.
Established akoya_established DateTime (DateOnly) None Creation date.
Date Retired akoya_dateretired DateTime (DateOnly) None Closure date if retired.
Restricted Through akoya_restrictedthrough DateTime None End date of any time restriction.

Balances and financials

All money columns have paired _Base system columns.

Display name Logical name Description
Net Assets akoya_netassets Total fund value (principal + earnings).
Earnings akoya_earnings Investment income accrued.
Spendable akoya_spendable Spendable balance (calculated).
Spendable Amount akoya_spendableamount Alternate spendable calc.
Initial Amount akoya_initialamount Original principal contributed.
Historic akoya_historic Prior-year historical balance.
Gifts Paid akoya_giftspaid Cumulative gift distributions.
Gifts Pending akoya_giftspending Undisbursed pledges.
Grants Paid akoya_grantspaid Cumulative grant distributions.
Grants Pending akoya_grantspending Undisbursed grant obligations.
Total Giving This Year akoya_totalgivingthisyear Current fiscal year inbound.
Total Giving Last Year akoya_totalgivinglastyear Prior fiscal year inbound.
Balances Updated akoya_balancesupdated Timestamp of last balance recalculation.

Spending policy and fees

Display name Logical name Type Description
Spend Percent akoya_spendpercent Float Spend policy as a percentage.
Fee Amount akoya_feeamount Money Flat fee.
Fee Percent akoya_feepercent Float Percentage fee.
Fee Calculation Basis akoya_feecalculationbasis Boolean Calculate on this fund's balance (false) or group balance (true).
Payment Frequency akoya_paymentfrequency Choice Annual, quarterly, monthly, etc. (global option set).
Number of Payments akoya_numberofpayments Integer Payout frequency counter.
First Pay Date akoya_firstpaydate DateTime First grant disbursement date.

Public portal (GOdonate / GOfund)

Display name Logical name Type Purpose
GOdonate Enabled akoya_godonateenabled Boolean Whether the fund appears on the public donation portal.
GOdonate Title Slug akoya_godonatetitleslug String URL-friendly slug for the public fund page.
GOfund Spendable akoya_gofundspendable Money Available-to-spend balance displayed in the portal.
Hide Spendable in GOfund akoya_hidespendablebalanceingofund Boolean Suppress balance display.
GOfund Ignore Spendable Limit akoya_gofundignorespendblelimit Boolean Allow distributions exceeding spendable.

Narrative

Display name Logical name Type Max length
Purpose akoya_purpose Memo 2000
Notes akoya_notes Memo 2000
Comments akoya_comments Memo 2000
Succession Plan akoya_successionplan Memo 2000
Annual Year Book akoya_annualyearbook Memo 2000
Acknowledgement Comment akoya_acknowledgementcomment Memo 2000
Handling Note akoya_handlingnote String

Lookups — quick reference

Logical name Navigation property Target Purpose
akoya_primarydonor akoya_PrimaryDonor akoya_donor Founding / primary donor.
akoya_primaryfundcontact akoya_PrimaryFundContact contact Primary fund contact (advisor, family rep).
akoya_department akoya_Department akoya_department Required. Owning department.
akoya_giftdefaultaccount akoya_GiftDefaultAccount akoya_account GL account for gifts into this fund.
akoya_nongiftdefaultaccount akoya_NonGiftDefaultAccount akoya_account GL account for non-gift revenue.
akoya_fundgroup akoya_FundGroup (fund group entity) Grouping for rollup and reporting.
akoya_fundstatementformat akoya_FundStatementFormat (statement format) Template used for periodic statements.
akoya_foundationstaffcontact akoya_FoundationStaffContact contact Assigned foundation staff.

Self-references (fund hierarchy and overrides)

Logical name Purpose
akoya_parent Parent fund in the hierarchy.
akoya_alternatefundfeefund Alternate fund that receives this fund's fees.
akoya_alternatejiafund Alternate Joint Investment Account fund for override.
akoya_alternatespendablefund Alternate fund where this fund's spendable is distributed.

Self-referential overrides

The four self-reference lookups above enable fund-of-funds structures and let administrators route fees or spendable distributions away from the fund that owns them. When traversing fund data, be prepared for cycles and always guard against infinite loops.

Choice values

akoya_fundclass values

Label Value
Operating 730850000
Endowment 730850001
Nonpermanent 730850002

akoya_fundtype values

Label Value
Donor Advised 730850000
Designated Purpose 730850001
Agency Endowment 730850002
General Unrestricted 730850003
Field of Interest 730850004
Special Project 730850005
Scholarship 730850006

akoya_fundinstrument values

Label Value
Annuity 730850000
Bequest 730850001
Fund Agreement 730850002
General Fund Memo 730850003
Charitable Lead Trust 730850004
Supporting Organization 730850005
Trustee Resolution 730850006
Charitable Remainder Unit Trust 730850007

akoya_anonymity values

Label Value
Anonymous for all purposes 730850000
Disclose after death 730850001
Anonymous for grantees 730850002
Anonymous for publications 730850003

Relationships

Many-to-One

Related entity Attribute Role
akoya_donor akoya_primarydonor Primary donor
contact akoya_primaryfundcontact Primary fund contact
akoya_account akoya_giftdefaultaccount Gift GL default
akoya_account akoya_nongiftdefaultaccount Non-gift GL default
akoya_fund (self) akoya_parent, akoya_alternate* Hierarchy and fee/spendable overrides

One-to-Many (child records)

Related entity Role
akoya_gift Gifts allocated to this fund (via akoya_fund1..12 split lookups).
akoya_giftpayment Payments posted to this fund.
akoya_request Grant requests paid from this fund.
akoya_requestpayment Request payments posted to this fund.
akoya_interfundgrants Inter-fund transfers where this fund is source or destination.

Supported messages

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

Privileges

Privilege Purpose
prvReadakoya_fund Read fund records
prvCreateakoya_fund Create fund records
prvWriteakoya_fund Update fund records
prvAppendToakoya_fund Associate child records (gifts, grants) to a fund

Examples

Conventions

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

Active endowed funds with balances

GET {org}/api/data/v9.2/akoya_funds?
  $select=akoya_fundname,akoya_fundcode,akoya_fundtype,akoya_netassets,akoya_spendable&
  $filter=statecode eq 0 and akoya_endowed eq true&
  $expand=akoya_PrimaryDonor($select=akoya_formaldefault),akoya_GiftDefaultAccount($select=akoya_accountnum)&
  $orderby=akoya_fundname asc
Accept: application/json
OData-Version: 4.0
OData-MaxVersion: 4.0
curl "https://{org}.crm.dynamics.com/api/data/v9.2/akoya_funds?\$select=akoya_fundname,akoya_fundcode,akoya_fundtype,akoya_netassets,akoya_spendable&\$filter=statecode%20eq%200%20and%20akoya_endowed%20eq%20true&\$expand=akoya_PrimaryDonor(\$select=akoya_formaldefault),akoya_GiftDefaultAccount(\$select=akoya_accountnum)&\$orderby=akoya_fundname%20asc" \
  -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_funds",
    params={
        "$select": "akoya_fundname,akoya_fundcode,akoya_fundtype,akoya_netassets,akoya_spendable",
        "$filter": "statecode eq 0 and akoya_endowed eq true",
        "$expand": "akoya_PrimaryDonor($select=akoya_formaldefault),akoya_GiftDefaultAccount($select=akoya_accountnum)",
        "$orderby": "akoya_fundname asc",
    },
    headers=headers,
)
funds = r.json()["value"]
var query = new QueryExpression("akoya_fund") {
    ColumnSet = new ColumnSet("akoya_fundname", "akoya_fundcode", "akoya_fundtype", "akoya_netassets", "akoya_spendable"),
    Criteria = {
        Conditions = {
            new ConditionExpression("statecode", ConditionOperator.Equal, 0),
            new ConditionExpression("akoya_endowed", ConditionOperator.Equal, true)
        }
    },
    Orders = { new OrderExpression("akoya_fundname", OrderType.Ascending) }
};
var funds = service.RetrieveMultiple(query);

Find fund by code then PATCH

No alternate keys exist — look up by fund code first, then PATCH by GUID.

GET {org}/api/data/v9.2/akoya_funds?
  $select=akoya_fundid&
  $filter=akoya_fundcode eq 'F-001234'&
  $top=1
Accept: application/json
OData-Version: 4.0
OData-MaxVersion: 4.0

Then:

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

{
  "akoya_spendpercent": 4.5,
  "akoya_feepercent": 1.0
}
FUND_ID=$(curl -s "https://{org}.crm.dynamics.com/api/data/v9.2/akoya_funds?\$select=akoya_fundid&\$filter=akoya_fundcode%20eq%20'F-001234'&\$top=1" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Accept: application/json" \
  | jq -r '.value[0].akoya_fundid')

curl -X PATCH "https://{org}.crm.dynamics.com/api/data/v9.2/akoya_funds($FUND_ID)" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -H "If-Match: *" \
  -d '{"akoya_spendpercent": 4.5, "akoya_feepercent": 1.0}'
r = requests.get(
    f"{ORG}/api/data/v9.2/akoya_funds",
    params={"$select": "akoya_fundid", "$filter": "akoya_fundcode eq 'F-001234'", "$top": 1},
    headers=headers,
)
hits = r.json()["value"]
if not hits:
    raise LookupError("Fund not found")
fund_id = hits[0]["akoya_fundid"]

requests.patch(
    f"{ORG}/api/data/v9.2/akoya_funds({fund_id})",
    json={"akoya_spendpercent": 4.5, "akoya_feepercent": 1.0},
    headers={**headers, "Content-Type": "application/json", "If-Match": "*"},
)
var lookup = new QueryExpression("akoya_fund") {
    ColumnSet = new ColumnSet("akoya_fundid"),
    Criteria = {
        Conditions = {
            new ConditionExpression("akoya_fundcode", ConditionOperator.Equal, "F-001234")
        }
    },
    TopCount = 1
};
var result = service.RetrieveMultiple(lookup);
if (result.Entities.Count == 0) throw new InvalidOperationException("Fund not found");

var fund = new Entity("akoya_fund", result.Entities[0].Id);
fund["akoya_spendpercent"] = 4.5;
fund["akoya_feepercent"] = 1.0;
service.Update(fund);

Change history

Schema extracted from the Akoyanet solution XML on 2026-04-24. Global option set values (akoya_paymentfrequency) are pending the Phase 2 metadata generator.