Skip to content

List ledger accounts

The ledger.accounts.list operation: GET /api/v1/ledger/accounts in the REST API and the ledger_accounts_list tool in the MCP server.

GET/api/v1/ledger/accounts

Lists the accounts of the legal entity's ledger in the mode of the request, newest first: the account explorer. One ledger serves all brands of the entity (spec §11.2); accounts are opened the first time a posting uses them, one per account code and currency.

Each account shows its balance in integer micros, signed in the account's normal direction: a positive balance is on the normalSide (debit for assets and expenses, credit for liabilities, revenue and equity), a negative one on the other side. posted counts posted entries; pending counts entries of pending transactions.

Filter by brandId (a brand's revenue, deferred revenue and receivables accounts and its customers' accounts; none for the entity-wide accounts), currency and type. Paginate with limit (1–100, default 10) and starting_after (the next_cursor of the previous page).

At a glance

  • REST: GET /api/v1/ledger/accounts
  • MCP tool: ledger_accounts_list
  • Operation ID: ledger.accounts.list
  • Scope: Legal entity
  • Permission: ledger:read
  • Risk tier: read
  • Dry run: Not supported
  • Idempotency: Not needed (read only)
  • Modes: Test and live
  • Pagination: limit (at most 100) and starting_after
  • Authentication: API key with the ledger:read scope
  • Since: M2

Request

Query parameters

FieldTypeRequiredDescription
brandIdbrd_… ID or "none"NoA brand's accounts (brd_…), or none for the entity-wide accounts.
currencystringNoAccounts in this currency.
typeone of asset, liability, revenue, expense, equityNoAccounts of this type.
limitinteger (1 to 100)NoPage size, 1 to 100 (default 10).
starting_afteracct_… IDNoThe next_cursor of the previous page.

Response

200 OK with a JSON object, a page of the list (newest first):

FieldTypeDescription
object"list"
dataarray of object
data[].idacct_… ID
data[].object"ledger_account"
data[].entityIdent_… ID
data[].livemodeboolean
data[].brandIdbrd_… ID or nullThe brand of a revenue, deferred revenue or receivables account, or of a customer's account.
data[].codestringThe account code from the chart of accounts, e.g. opening_balances:EUR.
data[].kindone of 19 values, e.g. processor_clearing, bank, receivable_customers (all in the OpenAPI document)What the code names, e.g. usage_revenue or tax_payable.
data[].typeone of asset, liability, revenue, expense, equity
data[].currencystring
data[].normalSideone of debit, creditThe side that increases the balance: debit for assets and expenses, credit for the rest.
data[].noNegativebooleanThe posted balance can't go below zero.
data[].balanceobjectInteger micros, signed in the normal direction (negative: on the other side). pending counts pending transactions.
data[].balance.postedinteger string
data[].balance.pendinginteger string
data[].createdAtdate-time
data[].updatedAtdate-time
has_moreboolean
next_cursoracct_… ID or null

Examples

The entity's EUR accounts

HTTP
GET /api/v1/ledger/accounts?currency=EUR
Authorization: Bearer or_test_…

Response (200):

JSON
{
  "object": "list",
  "data": [
    {
      "id": "acct_01m4tx5nj8emwbyf7y9vcf47xd",
      "object": "ledger_account",
      "entityId": "ent_01m4tx5nj8emwbyf7y9vcf47x2",
      "livemode": true,
      "brandId": null,
      "code": "opening_balances:EUR",
      "kind": "opening_balances",
      "type": "equity",
      "currency": "EUR",
      "normalSide": "credit",
      "noNegative": false,
      "balance": {
        "posted": "1500000000",
        "pending": "0"
      },
      "createdAt": "2026-10-13T12:00:00.000Z",
      "updatedAt": "2026-10-14T09:30:00.000Z"
    },
    {
      "id": "acct_01m4tx5nj8emwbyf7y9vcf47xc",
      "object": "ledger_account",
      "entityId": "ent_01m4tx5nj8emwbyf7y9vcf47x2",
      "livemode": true,
      "brandId": null,
      "code": "bank:ent_01m4tx5nj8emwbyf7y9vcf47x2:EUR",
      "kind": "bank",
      "type": "asset",
      "currency": "EUR",
      "normalSide": "debit",
      "noNegative": false,
      "balance": {
        "posted": "1500000000",
        "pending": "0"
      },
      "createdAt": "2026-10-13T12:00:00.000Z",
      "updatedAt": "2026-10-14T09:30:00.000Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Entity-wide equity accounts, one per page

HTTP
GET /api/v1/ledger/accounts?brandId=none&type=equity&limit=1
Authorization: Bearer or_test_…

Response (200):

JSON
{
  "object": "list",
  "data": [
    {
      "id": "acct_01m4tx5nj8emwbyf7y9vcf47xd",
      "object": "ledger_account",
      "entityId": "ent_01m4tx5nj8emwbyf7y9vcf47x2",
      "livemode": true,
      "brandId": null,
      "code": "opening_balances:EUR",
      "kind": "opening_balances",
      "type": "equity",
      "currency": "EUR",
      "normalSide": "credit",
      "noNegative": false,
      "balance": {
        "posted": "1500000000",
        "pending": "0"
      },
      "createdAt": "2026-10-13T12:00:00.000Z",
      "updatedAt": "2026-10-14T09:30:00.000Z"
    }
  ],
  "has_more": true,
  "next_cursor": "acct_01m4tx5nj8emwbyf7y9vcf47xd"
}

Errors

CodeHTTP statusWhenWhat to do
validation_failed400A filter or pagination value is invalid.Fix the fields listed in details.issues and send the request again.
scope_required400The request names no legal entity (an org key without Ownrecord-Entity).Call the operation with credentials or a target at its level: an organization, a legal entity, a brand or the platform (details.required_scope).
permission_denied403You can't see this entity's ledger (brand-scoped members never can).Ask an organization owner or admin for a role or scope that allows this action.

It can also return these common errors: api_version_unsupported, authentication_required, api_key_invalid, resource_not_found, dry_run_not_supported, rate_limited, internal_error.