Skip to content

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

GET {org}/api/data/v9.2/akoya_accounts?
  $select=akoya_accountnum,akoya_accountname,akoya_normalbalance&
  $filter=statecode eq 0 and akoya_accounttype eq 100000001&
  $orderby=akoya_accountnum asc
Accept: application/json
OData-Version: 4.0
OData-MaxVersion: 4.0
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"
r = requests.get(
    f"{ORG}/api/data/v9.2/akoya_accounts",
    params={
        "$select": "akoya_accountnum,akoya_accountname,akoya_normalbalance",
        "$filter": "statecode eq 0 and akoya_accounttype eq 100000001",
        "$orderby": "akoya_accountnum asc",
    },
    headers=headers,
)
accounts = r.json()["value"]
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

GET {org}/api/data/v9.2/akoya_accounts?
  $select=akoya_accountid,akoya_accountname,akoya_accounttype&
  $filter=akoya_accountnum eq '4000'&
  $top=1
Accept: application/json
OData-Version: 4.0
OData-MaxVersion: 4.0
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"
r = requests.get(
    f"{ORG}/api/data/v9.2/akoya_accounts",
    params={
        "$select": "akoya_accountid,akoya_accountname,akoya_accounttype",
        "$filter": "akoya_accountnum eq '4000'",
        "$top": 1,
    },
    headers=headers,
)
hits = r.json()["value"]
account = hits[0] if hits else None
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.