> This page is for version v2023-09-01.
> For other versions, use one of these documentation indexes:
> - v2024-05-25 (default): https://docs.monite.com/v-2024-05-25/llms.txt
> - v2024-01-31: https://docs.monite.com/v2024-01-31/llms.txt
> - v2023-09-01: https://docs.monite.com/v2023-09-01/llms.txt

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.monite.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.monite.com/_mcp/server.

# Ledger accounts

## Overview

A **general ledger** (GL) account is a component of an accounting system that is used to record and categorize a company's financial transactions. Some examples of common ledger accounts are:

* Expenses: office supplies, utilities, salaries, taxes, and so on,
* Income: sales and revenue, dividends, and so on,
* Assets: cash, inventory, and so on,
* Liabilities: accounts payable, debt, and so on.

Within an accounting system, each line item on an invoice is assigned a ledger account in order to properly categorize various expenses and income sources. In Monite, the `ledger_account_id` field of [products](../../accounts-receivable/products) and payable [line items](../../accounts-payable/payables/line-items) is used to assign ledger accounts to business objects. Additionally, the entity setting `accounting.ledger_account_ids.payments` specifies the ledger account for all [payment records](../../common/payment-records).

Products and payables *pulled* from the accounting system have the `ledger_account_id` pre-filled. However, when new products, payables, and payment records are created in Monite, the user must manually specify the `ledger_account_id` for those objects. This is required for Monite to be able to *push* those objects to the accounting system.

The typical flow is as follows:

1. After connecting an entity to an accounting system, wait until the initial data pull is completed.
2. Call [`GET /ledger_accounts`](/v2023-09-01/api/ledger-accounts/get-ledger-accounts) to get a list of an entity's general ledgers pulled from the accounting system.
3. If an entity uses accounts payable:
   1. Get the line items of all payables and check if the line items have `ledger_account_id`.
   2. If any line item is missing a value for `ledger_account_id`, prompt the user to assign the appropriate ledger account.
4. If an entity uses accounts receivable:
   1. Get all products and check if they have `ledger_account_id`.
   2. If any product is missing a value for `ledger_account_id`, prompt the user to assign the appropriate ledger account.
5. If an entity uses payment records:
   1. Prompt the user to specify a ledger account for all payment records and store the account ID in the [entity setting](/v2023-09-01/api/entities/patch-entities-id-settings) <code>accounting.<wbr />ledger_account_ids.<wbr />payments</code>.

## Get ledger accounts

Ledger accounts cannot be created in Monite and can only be pulled from an accounting system.

After connecting to an accounting system, Monite automatically retrieves a list of ledger accounts from there. Once the initial data synchronization has completed, you can call [`GET /ledger_accounts`](/v2023-09-01/api/ledger-accounts/get-ledger-accounts) to get an entity's ledger accounts that exist in the accounting system:

```sh
curl 'https://api.sandbox.monite.com/v1/ledger_accounts' \
  -H 'X-Monite-Version: 2023-09-01' \
  -H 'X-Monite-Entity-Id: ENTITY_ID' \
  -H 'Authorization: Bearer ACCESS_TOKEN'
```

Below is an example of ledger account details. Note down the IDs of the ledger accounts - these are the possible values of the `ledger_account_id` field in products and payable line items.

```json
{
  "data": [
    {
      "id": "f5f85999-cc35-43e6-93ad-46d22907022a",
      "currency": "EUR",
      "current_balance": 0,
      "description": "Outstanding invoices the company has issued out to the client but has not yet received in cash at balance date.",
      "is_bank_account": false,
      "name": "Accounts Receivable",
      "nominal_code": "610",
      "status": "Active",
      "subtype": "Current",
      "type": "Asset"
    },
    {
      "id": "8ecb60fd-88fd-40e4-8bd9-5fa154435b78",
      "currency": "EUR",
      "current_balance": 0,
      "description": "Income from business activity",
      "is_bank_account": false,
      "name": "Sales",
      "nominal_code": "200",
      "type": "Income",
      "status": "Active",
      "subtype": "Revenue"
    },
    ...
  ],
  "next_pagination_token": null,
  "prev_pagination_token": null
}
```

## Assign ledger accounts to products and payable line items \[#line-items]

Before payables can be pushed to an accounting system, each line item in all payables must have the `ledger_account_id` specified. Similarly, before Account Receivable invoices can be pushed to accounting, all products listed on invoices must have the `ledger_account_id` specified.

To specify an associated ledger account for a payable line item or a product, PATCH this object and provide the value for `ledger_account_id`. For example:

```sh
curl -X PATCH 'https://api.sandbox.monite.com/v1/products/51846...39d' \
     -H 'X-Monite-Version: 2023-09-01' \
     -H 'X-Monite-Entity-Id: ENTITY_ID' \
     -H 'Authorization: Bearer ACCESS_TOKEN' \
     -H 'Content-Type: application/json' \
     -d '{
       "ledger_account_id": "f5f85999-cc35-43e6-93ad-46d22907022a"
     }'
```

## Assign a ledger account to payment records \[#payment-record]

Before [payment records](../../common/payment-records) can be pushed to an accounting system, the entity must specify
the ledger account for these records.
To do this, store the account ID in the the entity setting <code>accounting.<wbr />ledger_account_ids.<wbr />payments</code>:

```sh
curl -X PATCH 'https://api.sandbox.monite.com/v1/entities/daf8e...5e7' \
     -H 'X-Monite-Version: 2023-09-01' \
     -H 'Authorization: Bearer ACCESS_TOKEN' \
     -H 'Content-Type: application/json' \
     -d '{
       "accounting": {
         "ledger_account_ids": {
           "payments": "f5f85999-cc35-43e6-93ad-46d22907022a"
         }
       }
     }'
```

The specified ledger account will be used both for manually added payment records and for payments made via Monite [payment page](../../payments/payment-links).

> **Info**
>
> This setting can be changed at any time, but it will have no impact on payment records that have already been pushed.