GL Account (akoya_account)¶
Naming collision
akoya_account is the general-ledger (GL) account table — NOT the standard Dataverse account entity.
account(no prefix) = organizations (donors, grantees, vendors, partners). Standard Dataverse.akoya_account(this page) = financial GL accounts (chart of accounts).
When building integrations, always disambiguate by the full logical name. A query against /accounts returns organizations; a query against /akoya_accounts returns GL accounts. See The constituent model for the full explanation — the naming-collision warning is at the top of that page.
A GL Account is a line on the foundation's chart of accounts — an asset, liability, revenue, or expense account used for posting financial transactions. Gifts, grants, fees, and interfund transfers all reference GL accounts for correct posting.
At a glance
| Display name | Account |
| Logical name | akoya_account |
| Primary ID attribute | akoya_accountid |
| Primary name attribute | akoya_accountnum |
| Entity set name (Web API) | akoya_accounts |
| Ownership | UserOwned |
| Change tracking | Enabled |
| Audit | Enabled |
Web API¶
GET {org}/api/data/v9.2/akoya_accounts
GET {org}/api/data/v9.2/akoya_accounts({accountid})
POST {org}/api/data/v9.2/akoya_accounts
PATCH {org}/api/data/v9.2/akoya_accounts({accountid})
Attributes¶
| Display name | Logical name | Type | Required | Max length | Description |
|---|---|---|---|---|---|
| Account # | akoya_accountnum |
String | ApplicationRequired | 6 | GL account number. Primary name attribute. |
| Account Name | akoya_accountname |
String | ApplicationRequired | 100 | Human-readable account description. |
| Account Type | akoya_accounttype |
Choice | None | — | See values. |
| Normal Balance | akoya_normalbalance |
Choice | None | — | Debit or Credit. See values. |
| Net Asset Type | akoya_netassettype |
Choice | None | — | See values. |
| Period End Closing Type | akoya_periodendclosingtype |
Choice | None | — | See values. |
| Joint Investment Account | akoya_jointinvestmentaccount |
Boolean | None | — | Flag for JIA roll-up. |
| Account Subcategory Description | akoya_accountsubcategorydescription |
String | None | 1000 | Full subcategory description synced from ERP. |
Lookups¶
| Logical name | Target | Purpose |
|---|---|---|
akoya_accountsubcategory |
akoya_accountsubcategory |
Subcategory classification. |
akoya_netaccount |
akoya_account (self) |
Self-reference. Rollup / net-asset clearing target. |
Choice values¶
akoya_accounttype values¶
| Label | Value |
|---|---|
| Balance Sheet | 100000000 |
| Income Statement | 100000001 |
| Totaling Balance Sheet | 100000002 |
akoya_normalbalance values¶
| Label | Value |
|---|---|
| Debit | 100000000 |
| Credit | 100000001 |
akoya_netassettype values¶
| Label | Value |
|---|---|
| Spendable | 100000000 |
| Earnings | 100000001 |
| Historic Gifts | 100000002 |
| Other | 100000003 |
akoya_periodendclosingtype values¶
| Label | Value |
|---|---|
| Non-Closing | 100000000 |
| Closing | 100000001 |
| Closed To | 100000002 |
Supported messages¶
| Message | Supported |
|---|---|
| Create | ✓ |
| Retrieve | ✓ |
| RetrieveMultiple | ✓ |
| Update | ✓ |
| Delete | ✓ — exercise caution; many records reference GL accounts. |
| Upsert | — (no alternate keys; use GET then PATCH) |
Examples¶
Conventions
Examples assume ORG (env URL), access_token (valid bearer), headers (standard Dataverse headers dict), and service (a ServiceClient instance). See Authentication.
All active income statement accounts¶
curl "https://{org}.crm.dynamics.com/api/data/v9.2/akoya_accounts?\$select=akoya_accountnum,akoya_accountname,akoya_normalbalance&\$filter=statecode%20eq%200%20and%20akoya_accounttype%20eq%20100000001&\$orderby=akoya_accountnum%20asc" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Accept: application/json" \
-H "OData-Version: 4.0" \
-H "OData-MaxVersion: 4.0"
var query = new QueryExpression("akoya_account") {
ColumnSet = new ColumnSet("akoya_accountnum", "akoya_accountname", "akoya_normalbalance"),
Criteria = {
Conditions = {
new ConditionExpression("statecode", ConditionOperator.Equal, 0),
new ConditionExpression("akoya_accounttype", ConditionOperator.Equal, 100000001)
}
},
Orders = { new OrderExpression("akoya_accountnum", OrderType.Ascending) }
};
var accounts = service.RetrieveMultiple(query);
Find GL account by number¶
curl "https://{org}.crm.dynamics.com/api/data/v9.2/akoya_accounts?\$select=akoya_accountid,akoya_accountname,akoya_accounttype&\$filter=akoya_accountnum%20eq%20'4000'&\$top=1" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Accept: application/json" \
-H "OData-Version: 4.0" \
-H "OData-MaxVersion: 4.0"
var query = new QueryExpression("akoya_account") {
ColumnSet = new ColumnSet("akoya_accountname", "akoya_accounttype"),
Criteria = {
Conditions = {
new ConditionExpression("akoya_accountnum", ConditionOperator.Equal, "4000")
}
},
TopCount = 1
};
var result = service.RetrieveMultiple(query);
var account = result.Entities.FirstOrDefault();
Change history¶
Schema extracted from the Akoyanet solution XML on 2026-04-24.