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

# Quickstart: Account Balance

> Track balances across sub-accounts within a customer using the Billing API

This guide walks through the account balance model: creating a customer, creating one or more accounts under that customer each with their own balance, and handling the payment webhook. This model is suited for merchants who need to track balances separately per product, service, or cost centre within a single customer.

## Prerequisites

* A test API key. See [Authentication](/api-reference/getting-started/authentication).
* A registered webhook endpoint. See [Webhook Setup](/api-reference/webhooks/setup) to register your URL and obtain your signing key.

***

## Step 1: Create a customer

Create the top-level customer record. At this level, no balance is required. Balances are tracked on the accounts below.

```bash theme={"system"}
curl -X POST https://api.momentpay.net/billing/customers \
  -H "Authorization: Bearer sk_test_YOUR_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "external_reference": "UCR1234567890",
    "name": "John Doe",
    "email": "john.doe@example.com"
  }'
```

The response returns an `id`. Store this to reference the customer when creating accounts.

```json theme={"system"}
{
  "id": "bcus_H4jp6KnU5cPw263v1jyz4",
  "external_reference": "UCR1234567890",
  "name": "John Doe",
  "email": "john.doe@example.com"
}
```

***

## Step 2: Create an account

Create an account under the customer with a `balance` representing what is owed on this account.

```bash theme={"system"}
curl -X POST https://api.momentpay.net/billing/accounts \
  -H "Authorization: Bearer sk_test_YOUR_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customer": "bcus_H4jp6KnU5cPw263v1jyz4",
    "external_reference": "UAR1234567890",
    "name": "Subscription Account",
    "currency": "ZAR",
    "balance": 2000
  }'
```

<Note>
  `balance` is specified in minor units. See [Monetary Amounts](/api-reference/getting-started/monetary_amounts) for details.
</Note>

The response returns an `id`. Store this to reference the account when presenting it for payment.

```json theme={"system"}
{
  "id": "bacc_H4jp6KnU5cPw263v1jyz4",
  "external_reference": "UAR1234567890",
  "customer_id": "bcus_H4jp6KnU5cPw263v1jyz4",
  "name": "Subscription Account",
  "currency": "ZAR",
  "balance": 2000
}
```

<Note>
  The customer and account can be created in a single request.<br /><br />Instead of passing a `customer` ID, pass a `customer` object with the same fields used in the create customer request.<br /><br />Moment creates the customer first and then creates the account, returning both IDs in the response. See [Create Account](/api-reference/billing/accounts/create#body-customer-one-of-2).
</Note>

***

## Step 3: Present the account balance for payment

Present the account balance for payment using [Electronic Bill Presentment](/documentation/billing/ebp) or a [Payment Request](/documentation/collect/payment-links/payment-requests).

***

## Step 4: Handle the payment webhook

When payment is received against the account, Moment sends an `obligation.amount_applied` event.

```json theme={"system"}
{
  "id": "evt_2341234567890abcdef",
  "type": "obligation.amount_applied",
  "data": {
    "id": "ob_N2a38DJQWPL8K4X42354234",
    "amount": 2000,
    "currency": "ZAR",
    "payment_id": "pay_1313235234843nmafdsa",
    "account_id": "bacc_H4jp6KnU5cPw263v1jyz4"
  }
}
```

Use `data.account_id` to identify which account received the payment and `data.amount` to reconcile against the account balance.

Before processing, verify the event signature. See [Webhook Verification](/api-reference/webhooks/verification).

Respond with a `2xx` status code to acknowledge receipt.

***

## Next steps

<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-2 gap-6">
  <Card title="Quickstart: Customer Balance" icon="user" href="/api-reference/billing/quickstart-customer-balance">
    Track a single running balance directly on a customer.
  </Card>

  <Card title="Quickstart: Bill Amount Due" icon="file-invoice" href="/api-reference/billing/quickstart-bill-amount-due">
    Raise a specific bill with an amount due and a due date.
  </Card>

  <Card title="Electronic Bill Presentment" icon="browser" href="/documentation/billing/ebp">
    Present account balances to customers via a hosted payment page.
  </Card>

  <Card title="Core Concepts" icon="book" href="/documentation/billing/core-concepts">
    Understand how customers, accounts, and bills relate to each other.
  </Card>

  <Card title="Common Operations" icon="code" href="/api-reference/billing/examples">
    Examples for updating customer balances, account balances, and bills.
  </Card>
</div>
