> ## Documentation Index
> Fetch the complete documentation index at: https://docs.blnkfinance.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Overview

> Learn how ledgers work in Blnk

export const CtaCallout = props => {
  const {title, buttonLabel, href, trackingEvent, buttonTarget, rel = "noopener noreferrer", children} = props;
  const handleCtaClick = () => {
    if (typeof window === "undefined" || !trackingEvent) {
      return;
    }
    try {
      window.dispatchEvent(new CustomEvent("blnk:docs-cta", {
        detail: {
          name: trackingEvent,
          href
        }
      }));
    } catch {}
    try {
      window.posthog?.capture?.(trackingEvent, {
        href
      });
    } catch {}
    const gaPayload = {
      cta_href: href
    };
    try {
      window.gtag?.("event", trackingEvent, gaPayload);
    } catch {}
    try {
      window.dataLayer = window.dataLayer || [];
      window.dataLayer.push({
        event: trackingEvent,
        ...gaPayload
      });
    } catch {}
  };
  const isExternal = typeof href === "string" && (/^https?:\/\//i).test(href);
  const target = buttonTarget ?? (isExternal ? "_blank" : undefined);
  const linkRel = isExternal ? rel : undefined;
  return <section className="cta-callout not-prose relative my-8 w-full min-w-0 overflow-hidden rounded-xl border border-zinc-200 p-5 dark:border-white/10">
      <div className="cta-callout-noise" aria-hidden="true" />
      <div className="cta-callout-layout">
        {title ? <div className="cta-callout-title-row">
            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 28 28" width="14" height="14" className="cta-callout-icon shrink-0 text-zinc-800 dark:text-zinc-200" aria-hidden="true">
              <g fill="none" fillRule="nonzero">
                <path d="M28 0v28H0V0h28ZM14.691833333333335 27.134333333333334l-0.012833333333333334 0.0023333333333333335 -0.08283333333333333 0.04083333333333334 -0.023333333333333334 0.004666666666666667 -0.016333333333333335 -0.004666666666666667 -0.08283333333333333 -0.04083333333333334c-0.011666666666666667 -0.004666666666666667 -0.022166666666666668 -0.0011666666666666668 -0.028000000000000004 0.005833333333333334l-0.004666666666666667 0.011666666666666667 -0.019833333333333335 0.49933333333333335 0.005833333333333334 0.023333333333333334 0.011666666666666667 0.015166666666666667 0.12133333333333333 0.08633333333333333 0.0175 0.004666666666666667 0.014000000000000002 -0.004666666666666667 0.12133333333333333 -0.08633333333333333 0.014000000000000002 -0.018666666666666668 0.004666666666666667 -0.019833333333333335 -0.019833333333333335 -0.4981666666666667c-0.0023333333333333335 -0.011666666666666667 -0.0105 -0.019833333333333335 -0.019833333333333335 -0.021Zm0.3091666666666667 -0.13183333333333336 -0.015166666666666667 0.0023333333333333335 -0.21583333333333335 0.1085 -0.011666666666666667 0.011666666666666667 -0.0035000000000000005 0.012833333333333334 0.021 0.5016666666666667 0.005833333333333334 0.014000000000000002 0.009333333333333334 0.008166666666666668 0.23450000000000004 0.1085c0.014000000000000002 0.004666666666666667 0.026833333333333334 0 0.03383333333333334 -0.009333333333333334l0.004666666666666667 -0.016333333333333335 -0.03966666666666667 -0.7163333333333334c-0.0035000000000000005 -0.014000000000000002 -0.011666666666666667 -0.023333333333333334 -0.023333333333333334 -0.025666666666666667Zm-0.8341666666666667 0.0023333333333333335a0.026833333333333334 0.026833333333334334 0 0 0 -0.0315 0.007000000000000001l-0.007000000000000001 0.016333333333333335 -0.03966666666666667 0.7163333333333334c0 0.014000000000000002 0.008166666666666668 0.023333333333333334 0.019833333333333335 0.028000000000000004l0.0175 -0.0023333333333333335 0.23450000000000004 -0.1085 0.011666666666666667 -0.009333333333333334 0.004666666666666667 -0.012833333333333334 0.019833333333333335 -0.5016666666666667 -0.0035000000000000005 -0.014000000000000002 -0.011666666666666667 -0.011666666666666667 -0.21466666666666667 -0.10733333333333334Z" strokeWidth="1.1667" />
                <path fill="currentColor" d="M14 2.916666666666667A1.75 1.75 0 0 1 15.750000000000002 4.666666666666667v6.302333333333334L21.207666666666668 7.816666666666667a1.75 1.75 0 0 1 1.75 3.031L17.5 14l5.457666666666667 3.151166666666667a1.75 1.75 0 0 1 -1.75 3.031l-5.457666666666667 -3.1500000000000004V23.333333333333336a1.75 1.75 0 0 1 -3.5 0v-6.302333333333334L6.792333333333334 20.183333333333337a1.75 1.75 0 1 1 -1.75 -3.031L10.5 14 5.042333333333334 10.848833333333333a1.75 1.75 0 0 1 1.75 -3.031l5.457666666666667 3.1500000000000004V4.666666666666667A1.75 1.75 0 0 1 14 2.916666666666667Z" strokeWidth="1.1667" />
              </g>
            </svg>
            <p className="cta-callout-title min-w-0 font-semibold text-zinc-800 dark:text-zinc-200">
              {title}
            </p>
          </div> : null}
        <div className={`cta-callout-body text-sm leading-normal text-zinc-800 dark:text-zinc-200${title ? " cta-callout-body--indented" : ""}`}>
          {children}
        </div>
        <a href={href} target={target} rel={linkRel} onClick={handleCtaClick} data-docs-cta={trackingEvent || undefined} className="cta-callout-button inline-flex items-center justify-center gap-1 rounded-full bg-white px-3 py-1.5 text-sm font-semibold transition hover:bg-zinc-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-white/50 dark:bg-white dark:hover:bg-zinc-200">
          {buttonLabel}
          <span className="cta-callout-button-arrow" aria-hidden="true">
            →
          </span>
        </a>
      </div>
    </section>;
};

Blnk uses a structured ledger system to organize and group account balances effectively. This system simplifies navigation and improves the clarity and accessibility of financial data.

When setting up Blnk for your application, the first step is to create ledgers. Since balances need to be grouped within a ledger, you cannot create balances without one. Therefore, it’s essential to plan how you want to categorize your balances before you begin. To learn more, see the following: [Ledger architecture](/ledgers/architecture).

***

## Types of ledgers in Blnk

Blnk includes two types of ledgers - a General Ledger and custom ledgers.

1. **General Ledger:** This built-in ledger is designed to group balances that represent accounts owned by your organization, similar to a Chart of Accounts. Unlike custom ledgers, balances in the General Ledger come with indicators, making it easier to reference them in your code when recording transactions. To learn more about the General Ledger, see the following: [General Ledger](/ledgers/general-ledger).

2. **Custom ledgers:** These are ledgers you create based on the ledger architecture you’ve defined for your application.

<CardGroup>
  <Card title="Creating balances in the General Ledger" icon="network" href="/balances/internal-balances">
    General Ledger balance setup and management.
  </Card>

  <Card title="Architecting your ledger" icon="layers" href="/ledgers/architecture">
    Structure ledgers for your product.
  </Card>
</CardGroup>

***

## Creating a ledger

To create a ledger, call the [**Create Ledger**](/reference/create-ledger) endpoint:

<CodeGroup>
  ```bash cURL wrap theme={"system"}
  curl -X POST "http://localhost:5001/ledgers" \
    -H "X-blnk-key: <api-key>" \
    -H "Content-Type: application/json" \
    -d '{
      "name": "Customer Savings Account",
      "meta_data": {
          "project_owner": "YOUR_APP_NAME"
      }
    }'
  ```

  ```typescript TypeScript wrap theme={"system"}
  const response = await blnk.Ledgers.create({
    name: 'Customer Savings Account',
    meta_data: {
      project_owner: 'YOUR_APP_NAME',
    },
  });
  ```

  ```go Go wrap theme={"system"}
  ledger, _, err := client.Ledger.Create(blnkgo.CreateLedgerRequest{
      Name: "Customer Savings Account",
      MetaData: map[string]interface{}{
          "project_owner": "YOUR_APP_NAME",
      },
  })
  if err != nil {
      log.Fatal(err)
  }
  fmt.Println("Ledger Created:", ledger.LedgerID)
  ```

  ```bash Blnk CLI wrap theme={"system"}
  blnk ledgers create
  ```
</CodeGroup>

```json Response theme={"system"}
{
    "ledger_id": "ldg_073f7ffe-9dfd-42ce-aa50-d1dca1788adc",
    "name": "Customer Savings Account",
    "created_at": "2024-12-21T01:36:46.997063436Z",
    "meta_data":{
        "project_owner": "YOUR_APP_NAME"
    }
}
```

<Tabs>
  <Tab title="Request">
    | Field       | Description                                           | Required | Type     |
    | :---------- | :---------------------------------------------------- | :------- | :------- |
    | `name`      | A name that best describes the function of the ledger | Yes      | `string` |
    | `meta_data` | Custom data associated with the ledger being created  | No       | `object` |
  </Tab>

  <Tab title="Response">
    | Field        | Description                                  | Type     |
    | ------------ | -------------------------------------------- | -------- |
    | `ledger_id`  | Unique identification number for your ledger | `string` |
    | `name`       | The name of your ledger                      | `string` |
    | `created_at` | Date and time of when it was created         | `string` |
  </Tab>
</Tabs>

***

## Updating a ledger name

You can rename an existing ledger using the [**Update Ledger Name**](/reference/update-ledger-name) endpoint without affecting any balances or transactions:

<CodeGroup>
  ```bash cURL wrap theme={"system"}
  curl -X PUT "http://localhost:5001/ledgers/{id}" \
    -H "X-blnk-key: <api-key>" \
    -H "Content-Type: application/json" \
    -d '{
      "name": "Updated Customer Savings Account"
    }'
  ```

  ```typescript TypeScript wrap theme={"system"}
  const response = await blnk.Ledgers.update(
    'ldg_073f7ffe-9dfd-42ce-aa50-d1dca1788adc',
    {
      name: 'Updated Customer Savings Account',
    },
  );
  ```

  ```bash Blnk CLI wrap theme={"system"}
  blnk ledgers update-name
  ```
</CodeGroup>

```json Response theme={"system"}
{
  "ledger_id": "ldg_073f7ffe-9dfd-42ce-aa50-d1dca1788adc",
  "name": "Updated Customer Savings Account",
  "created_at": "2024-12-21T01:36:46.997063436Z"
}
```

<Tip>
  The ledger ID remains unchanged when you update the name, ensuring all existing references continue to work properly.
</Tip>

***

## Practical example

Here’s an example with seven accounts to illustrate how to use ledgers in Blnk:

| Account name | Type(s)           |
| :----------- | :---------------- |
| Aria Collins | Savings           |
| Luca Sanders | Savings           |
| Ivy Monroe   | Checking          |
| Jasper Hale  | Checking, Savings |
| Mia Delgado  | Savings           |
| Ezra Donovan | Checking          |
| Ruby Foster  | Checking, Savings |

With Blnk’s ledger functionality, you can categorize these accounts by name, type, or other criteria that fit your organizational needs.

This helps you maintain clean, organized records that are easy to search and manage. As your data scales, this categorization becomes even more valuable, enabling you to conduct deeper analyses, identify patterns, and make more informed decisions.

### Ledger grouping by type

In this approach, accounts are organized by type rather than by individual customer. Two separate ledgers are created- one for “Savings Accounts” and another for “Checking Accounts.” This setup groups accounts by their function, making it easy to reference all accounts within a specific type.

| Savings Account Ledger                                                                              | Checking Account Ledger                                                      |
| :-------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------- |
| - Aria Collins <br /> - Luca Sanders <br /> - Jasper Hale <br /> - Mia Delgado <br /> - Ruby Foster | - Ivy Monroe <br /> - Jasper Hale <br /> - Ezra Donovan <br /> - Ruby Foster |

In this example, there are 5 savings accounts and 4 checking accounts across 7 unique customers. But customers like Jasper Hale and Ruby Foster have both types of accounts, which means they appear in both ledgers.

This type-based grouping provides a clear breakdown of accounts, showing which accounts fall under savings and which under checking. This can be useful for tracking and reference, particularly if you need to analyze account activity or usage patterns based on account type.

### Ledger grouping by name

In this approach, rather than organizing accounts by type (e.g., Savings or Checking), we create a separate ledger for each unique customer. This allows each customer’s accounts to be listed together under their name, making it easy to view all accounts belonging to a single individual.

| **Aria Collins** | **Luca Sanders** | **Ivy Monroe** | **Jasper Hale**             | **Mia Delgado** | **Ezra Donovan** | **Ruby Foster**             |
| :--------------- | :--------------- | :------------- | :-------------------------- | :-------------- | :--------------- | :-------------------------- |
| - Savings        | - Savings        | - Checking     | - Checking <br /> - Savings | - Savings       | - Checking       | - Checking <br /> - Savings |

Each ledger entry is focused on the customer, showing all accounts that the customer holds. For instance, Jasper Hale and Ruby Foster each have both a checking and a savings account, so both account types are listed under their names.

This customer-focused organization makes it easy to see all account types associated with each individual. It can be helpful when managing customer relationships or viewing a comprehensive overview of each customer’s financial engagement in the system.

***

## Need help?

We are very happy to help you make the most of Blnk, regardless of whether it is your first time or you are switching from another tool.

To ask questions or discuss issues, please [contact us](mailto:support@blnkfinance.com) or [join our Discord community](https://discord.gg/7WNv94zPpx).

<CtaCallout title="Connect your ledger to Blnk Cloud" href="https://cloud.blnkfinance.com/auth/sign-up?utm_source=blnk_docs&utm_medium=documentation&utm_campaign=need-help" buttonLabel="Open Blnk Cloud" trackingEvent="clicked_cloud_signup">
  Sign up and manage your ledger with our back-office dashboard. You can invite teammates to collaborate and manage your ledger operations directly from the dashboard.
</CtaCallout>
