> ## 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 balances 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>;
};

Ledger balances (or balances, for short) are used to represent store of value in your Blnk Ledger, i.e., accounts, wallets, card balance, etc. They also represent the source or destination of a transaction record.

All ledger balances in the Blnk Ledger each have 6 main balance attributes:

| Attribute                 | Description                                                               |
| :------------------------ | :------------------------------------------------------------------------ |
| `balance`                 | The current value held in the ledger balance                              |
| `credit_balance`          | The total sum of all amounts received by a ledger balance                 |
| `debit_balance`           | The total sum of all amounts sent by a ledger balance                     |
| `inflight_balance`        | The net amount held inflight for a balance                                |
| `inflight_credit_balance` | The total sum of all amounts waiting to be received by a ledger balance   |
| `inflight_debit_balance`  | The total sum of all amounts waiting to be deducted from a ledger balance |

<Warning>**Important to note:** Balance amounts are immutable and can only be updated through transactions. You cannot manually set or alter a balance amount directly.</Warning>

***

## Creating a balance

To create a balance in Blnk, call the **Create Balance** endpoint:

<CodeGroup>
  ```bash cURL wrap theme={"system"}
  curl -X POST "http://localhost:5001/balances" \
    -H "X-blnk-key: <api-key>" \
    -H "Content-Type: application/json" \
    -d '{
      "ledger_id": "ldg_073f7ffe-9dfd-42ce-aa50-d1dca1788adc",
      "currency": "USD",
      "meta_data": {
          "first_name": "Alice",
          "last_name": "Hart",
          "account_number": "1234567890"
      }
    }'
  ```

  ```typescript TypeScript wrap theme={"system"}
  const response = await blnk.LedgerBalances.create({
    ledger_id: 'ldg_073f7ffe-9dfd-42ce-aa50-d1dca1788adc',
    currency: 'USD',
    meta_data: {
      first_name: 'Alice',
      last_name: 'Hart',
      account_number: '1234567890',
    },
  });
  ```

  ```go Go wrap theme={"system"}
  balance, _, err := client.LedgerBalance.Create(blnkgo.CreateLedgerBalanceRequest{
      LedgerID: "ldg_073f7ffe-9dfd-42ce-aa50-d1dca1788adc",
      Currency: "USD",
      MetaData: map[string]interface{}{
          "first_name":     "Alice",
          "last_name":      "Hart",
          "account_number": "1234567890",
      },
  })
  if err != nil {
      log.Fatal(err)
  }
  fmt.Println("Balance Created:", balance.BalanceID)
  ```

  ```bash Blnk CLI wrap theme={"system"}
  blnk balances create
  ? Ledger ID: <ledger-id>
  ? Currency: <currency>
  ? Metadata (JSON format): <metadata>
  ```
</CodeGroup>

```json Response expandable theme={"system"}
{
    "balance": 0,
    "version": 0,
    "inflight_balance": 0,
    "credit_balance": 0,
    "inflight_credit_balance": 0,
    "debit_balance": 0,
    "inflight_debit_balance": 0,
    "ledger_id": "ldg_073f7ffe-9dfd-42ce-aa50-d1dca1788adc",
    "identity_id": "",
    "balance_id": "bln_e39a239a-a6ca-4509-b0d9-29dcc5630f8a",
    "indicator": "",
    "currency": "USD",
    "created_at": "2024-07-05T08:13:18.882616461Z",
    "meta_data": {
        "customer_internal_id": "1234",
        "customer_name": "Jerry"
    }
}
```

<Note>All newly created balances in the Blnk Ledger start from 0. You cannot create a ledger balance with a predefined balance amount.</Note>

***

## Queued balances

<Info>Available in version 0.8.3 and later.</Info>

You can track total transaction amounts in queue per balance via the `queued_credit_balance` and `queued_debit_balance` attributes. These attributes show the cumulative value of all queued transactions that will affect a balance once they're processed.

When you query a balance, you'll see:

1. **queued\_credit\_balance**: Total amount of incoming transactions waiting to be processed.
2. **queued\_debit\_balance**: Total amount of outgoing transactions waiting to be processed.

This helps you estimate the potential impact of queued transactions on your balance before they're processed.

<Tip>
  Use queued balances to check if a balance has pending transactions. If either `queued_credit_balance` or `queued_debit_balance` is greater than 0, there are transactions waiting in the queue for that balance.
</Tip>

<Warning>
  Queued balances are estimates and may change as transactions are processed or if queue processing fails. Always verify final balances after queue processing completes.
</Warning>

To view the queued balances of a ledger balance:

<CodeGroup>
  ```bash cURL wrap theme={"system"}
  curl -X GET 'http://YOUR_BLNK_INSTANCE_URL/balances/{balance_id}?with_queued=true' \
    -H 'X-blnk-key: <api-key>'
  ```

  ```typescript TypeScript wrap theme={"system"}
  const response = await blnk.LedgerBalances.get(
    'bln_e39a239a-a6ca-4509-b0d9-29dcc5630f8a',
    {
      with_queued: true,
    },
  );
  ```
</CodeGroup>

```json Response {9-10} expandable theme={"system"}
{
    "balance": 0,
    "version": 0,
    "inflight_balance": 0,
    "credit_balance": 0,
    "inflight_credit_balance": 0,
    "debit_balance": 0,
    "inflight_debit_balance": 0,
    "queued_credit_balance": 0,
    "queued_debit_balance": 0,
    "ledger_id": "ldg_073f7ffe-9dfd-42ce-aa50-d1dca1788adc",
    "identity_id": "",
    "balance_id": "bln_e39a239a-a6ca-4509-b0d9-29dcc5630f8a",
    "indicator": "",
    "currency": "USD",
    "created_at": "2024-07-05T08:13:18.882616461Z",
    "meta_data": {
        "customer_internal_id": "1234",
        "customer_name": "Jerry"
    }
}
```

### Calculating expected and available balances

Use these formulas to understand your balance position:

1. **Expected balance:** What your balance will be after all queued credits are processed

   ```
   expected_balance = current_balance + queued_credit_balance
   ```

2. **Available balance:** How much you can safely spend or transfer (accounting for pending debits)

   ```
   available_balance = current_balance - inflight_debit_balance - queued_debit_balance
   ```

<Info>
  **Example:** If your current balance is $100, you have $50 in queued credits, and \$20 in queued debits:

  * Expected balance: $100 + $50 = \$150
  * Available balance: $100 - $0 - $20 = $80
</Info>

***

## Multi-currency balances

Blnk enables you to create and manage balances in multiple currencies within your ledger. When building multi-currency wallets with Blnk, keep the following in mind:

1. **Standardize [precision](/transactions/precision) across currencies:** Most fiat currencies have a precision of 100. However, when managing currencies with different precision values, such as crypto and fiat, it's crucial to use the highest precision value for all transactions in your ledger. This ensures consistency when calculating transactions and converting exchange rates between currencies.

***

## Balance overdrafts

An overdraft occurs when a transaction reduces a ledger balance below zero, resulting in a negative balance. This means that the amount debited exceeds the available funds in the account. While traditionally seen as a deficit, in Blnk, a negative balance is simply another balance state and can be used flexibly, especially depending on the type of financial product.

In Blnk, implementing overdrafts is straightforward. By setting the `allow_overdraft` attribute when initiating a transaction, you can allow a ledger balance to fall below 0. This feature is valuable as it provides insights and reflects the position of a balance, especially useful in certain product contexts, such as lending or line-of-credit services.

See the following: [Applying overdrafts](/transactions/overdrafts)

### Why negative balances?

In Blnk, a negative balance is simply a balance state and doesn’t necessarily mean there’s a problem. For example, it can simply show borrowed funds, as expected in products like loans or credit, where it reflects the amount owed.

It could also mean that a balance has more debits than credits - this is especially relevant for internal balances like `@World`. To learn more, see the following: [Internal balances](/balances/internal-balances)

Moreover, a negative balance is often temporary and can revert to a positive balance under certain conditions, such as:

1. **Incoming Credits:** When new funds are credited to the account, they reduce or eliminate the negative balance.
2. **Scheduled Repayments:** For products like loans, regular repayments or scheduled deposits will move the balance back toward positive territory over time, ultimately making it positive if the full overdraft is repaid.

## 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>
