Skip to main content
POST
Create a custom GL account

Authorizations

Authorization
string
header
required

API key issued per entity via Settings > Developers > API Keys. Each key carries scopes (e.g. orders:read, products:write). Bearer token format: Authorization: Bearer ark_live_ent_Test keys use ark_test_ent_. Both are issued per entity
via Settings > Developers > API Keys.

Body

application/json
account_number
string
required

Unique account number (e.g. '5500')

name
string
required
account_type
enum<string>
required
Available options:
asset,
liability,
equity,
revenue,
expense,
cogs
normal_balance
enum<string>
required
Available options:
debit,
credit
description
string
account_sub_type
string
parent_account_id
string<uuid>

UUID of parent header account

is_header
boolean

True for rollup accounts that cannot receive postings

tax_line_mapping
string
opening_balance
number
opening_balance_date
string<date>

Response

Created GL account

A General Ledger account in the chart of accounts. Header accounts (is_header=true) aggregate child accounts and cannot receive postings (Rule A2 / Rule 21). Leaf accounts (is_header=false, is_active=true) are the only valid targets for journal entry lines. System accounts (is_system_account=true) are provisioned by entity-seed-helpers.mjs and cannot be created or modified via the API.

id
string<uuid>
read-only
entity_id
string<uuid>
read-only
account_number
string
read-only

Immutable post-create (e.g. '1300')

name
string
description
string | null
account_type
enum<string>
read-only

Immutable post-create

Available options:
asset,
liability,
equity,
revenue,
expense,
cogs
account_sub_type
string | null
normal_balance
enum<string>
read-only

Immutable post-create

Available options:
debit,
credit
is_header
boolean

True for rollup accounts that aggregate children. Header accounts CANNOT receive journal entry line postings (Rule A2 / assertGLLinesPostable).

parent_account_id
string<uuid> | null
parent_account_number
string | null
read-only

The IMMEDIATE parent account's number (null for a root account). GL-PICKER-SUBLEDGER-DISCOVERABILITY 2026-08-21.

parent_path
string[]
read-only

Root-first array of ancestor account NAMES, e.g. ["Cash & Bank Accounts", "Payment Clearing"]. Empty for a root account. Resolved from the entity's full account graph, NOT from the filtered result set, so a child whose parent is a header (and therefore excluded by postable_only / context=) still reports its complete path. GL-PICKER-SUBLEDGER-DISCOVERABILITY 2026-08-21.

depth
integer
read-only

Ancestor count (0 = root). Same independent resolution as parent_path, so the two can never disagree about one chain.

is_system_account
boolean
read-only

True for accounts seeded by entity-seed-helpers.mjs. System accounts cannot be created, updated, or deleted via the API.

system_account_key
string | null
read-only

Lookup key used by posting helpers (e.g. ar_account, cogs, revenue, inventory_fg). Code uses getGLAccountByKey(entityId, key) instead of hardcoded account numbers.

is_bank_account
boolean

True for bank/cash accounts eligible for reconciliation

is_active
boolean
tax_line_mapping
string | null
opening_balance
number | null
opening_balance_date
string<date> | null
created_at
string<date-time>
read-only
updated_at
string<date-time>
read-only