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

# Applying overdrafts

> Represent balance overdrafts and negative balances in your Ledger.

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

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

To send money, the `source` is required to have enough funds to execute the transaction. If Blnk detects insufficent funds, the transaction is rejected. However, there are certain transaction workflows that do not fit this default requirement.

Overdrafts is a Blnk feature that lets you successfully record a transaction regardless of the `source`'s balance. When overdrafts is enabled, the transaction is processed and the balance (if insufficent) is allowed to go negative.

Learn more about [how to work with negative balances](/resources/negative-balances)

<Tip>
  A very popular use-case for overdrafts is lending. You can also use it for [internal balances](/balances/internal-balances) that do not have a starting balance such as `@World`.
</Tip>

What we'll cover …

1. [Enabling overdrafts](#1-enabling-overdrafts)
2. [Some real-life applications](#2-some-real-life-applications)

***

## Enabling overdrafts

Overdrafts are applied when recording a transacton. To enable overdraft, include the `allow_overdraft` parameter and set its value to `true` in your request body:

<CodeGroup>
  ```bash cURL wrap theme={"system"}
  curl -X POST "http://YOUR_BLNK_INSTANCE_URL/transactions" \
    -H "X-blnk-key: <api-key>" \
    -H "Content-Type: application/json" \
    -d '{
      "precise_amount": 11230,
      "precision": 100,
      "reference": "ref-ghwe12009",
      "currency": "USD",
      "source": "@World",
      "destination": "bln_28edb3e5-c168-4127-a1c4-16274e7a28d3",
      "allow_overdraft": true,
      "meta_data": {
        "account_type": "savings"
      }
    }'
  ```

  ```typescript TypeScript wrap theme={"system"}
  const response = await blnk.Transactions.create({
    precise_amount: 11230,
    precision: 100,
    reference: 'ref-ghwe12009',
    currency: 'USD',
    source: '@World',
    destination: 'bln_28edb3e5-c168-4127-a1c4-16274e7a28d3',
    allow_overdraft: true,
    meta_data: { account_type: 'savings' },
  });
  ```

  ```go Go wrap theme={"system"}
  transaction, resp, err := client.Transaction.Create(blnkgo.CreateTransactionRequest{
    ParentTransaction: blnkgo.ParentTransaction{
      PreciseAmount: 11230,
      Reference:   "ref-ghwe12009",
      Currency:    "USD",
      Precision:   100,
      Source:      "@World",
      Destination: "bln_28edb3e5-c168-4127-a1c4-16274e7a28d3",
    },
    AllowOverdraft: true,
  })
  ```
</CodeGroup>

```json Response theme={"system"}
{
  "amount": 112.30,
  "precision": 100,
  "precise_amount": 11230,
  "transaction_id": "txn_6164573b-6cc8-45a4-ad2e-7b4ba6a60f7d",
  "reference": "ref-ghwe12009",
  "currency": "USD",
  "source": "@World",
  "destination": "bln_28edb3e5-c168-4127-a1c4-16274e7a28d3",
  "status": "QUEUED",
  "allow_overdraft": true,
  "created_at": "2024-12-21T01:36:46.997063436Z"
}
```

***

## Setting overdraft limits

<Info>Available on version 0.10.1 or later.</Info>

By default, when the `allow_overdraft` parameter is set to true without additional settings, there is no limit to how negative an account balance can go.

However, in most cases, you’ll want to define a maximum overdraft limit using the `overdraft_limit` parameter.

<CodeGroup>
  ```bash cURL wrap theme={"system"}
  curl -X POST "http://YOUR_BLNK_INSTANCE_URL/transactions" \
    -H "X-blnk-key: <api-key>" \
    -H "Content-Type: application/json" \
    -d '{
      "precise_amount": 11230,
      "precision": 100,
      "reference": "ref-ghwe12009",
      "currency": "USD",
      "source": "@World",
      "destination": "bln_2e8db3e5-c168-4127-a1c4-16274e7a28d3",
      "allow_overdraft": true,
      "overdraft_limit": 500.00,
      "meta_data": {
        "account_type": "savings"
      }
    }'
  ```

  ```typescript TypeScript wrap theme={"system"}
  const response = await blnk.Transactions.create({
    precise_amount: 11230,
    precision: 100,
    reference: 'ref-ghwe12009',
    currency: 'USD',
    source: '@World',
    destination: 'bln_2e8db3e5-c168-4127-a1c4-16274e7a28d3',
    allow_overdraft: true,
    overdraft_limit: 500.00,
    meta_data: { account_type: 'savings' },
  });
  ```

  ```go Go wrap theme={"system"}
  transaction, resp, err := client.Transaction.Create(blnkgo.CreateTransactionRequest{
    ParentTransaction: blnkgo.ParentTransaction{
      PreciseAmount: 11230,
      Reference:   "ref-ghwe12009",
      Currency:    "USD",
      Precision:   100,
      Source:      "@World",
      Destination: "bln_2e8db3e5-c168-4127-a1c4-16274e7a28d3",
    },
    AllowOverdraft: true,
    OverdraftLimit: 500.00,
  })
  ```
</CodeGroup>

```json Response theme={"system"}
{
  "amount": 112.30,
  "precision": 100,
  "transaction_id": "txn_6164573b-6cc8-45a4-ad2e-7b4ba6a60f7d",
  "allow_overdraft": true,
  "overdraft_limit": 500.00,
  "status": "QUEUED",
  "created_at": "2024-12-21T01:36:46.997063436Z"
}
```

| Overdraft fields  | Type    | Description                                                                   |
| :---------------- | :------ | :---------------------------------------------------------------------------- |
| `allow_overdraft` | Boolean | Enables overdraft functionality, allowing the account balance to go negative. |
| `overdraft_limit` | Number  | Sets the maximum overdraft amount.                                            |

### How overdraft limits work

When processing a transaction with an overdraft limit:

1. If the source account has sufficient funds, the transaction proceeds as normal.
2. If the source account has insufficient funds but `allow_overdraft` is `true`:

   * If `overdraft_limit` is set to 0 or not provided, the transaction will succeed, and the balance can go negative without restriction.
   * If `overdraft_limit` is greater than 0, the transaction will only succeed if the resulting negative balance does not exceed the specified limit.

### Error handling

If a transaction would cause the balance to exceed the overdraft limit, it will fail with the following error message:

```json theme={"system"}
{
  "error": "failed to apply transaction to balances: transaction exceeds overdraft_limit"
}
```

***

## Some real-life applications

1. **Loans and credit facilities:** You can easily implement lending features, track how much a customer has spent outside of their available balance, manage credit history, etc., and record it all in your Blnk Ledger.

   With overdraft limits, you can set credit limits for different customers based on their creditworthiness.

2. **Internal money movement:** Your internal balances can often face fluctuations in cash flow, especially during unpredictable periods. Overdrafts allow you to efficiently manage this without disrupting your financial operation.

   Setting overdraft limits helps maintain control over internal spending.

3. **Prepaid cards with buffer:** You can implement prepaid cards that allow a small overdraft buffer (e.g., \$20) to handle scenarios like tips added after a restaurant charge.

4. **Tiered overdraft limits:** You can implement different overdraft limits for different customer tiers or account types by storing these values in your system and applying the appropriate limit in each transaction.

***

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