# Get account balance (/docs/api-reference/account/getAccountBalance)

> Read your organization's wallet: the remaining balance, the minutes it buys at your rates, your plan, your concurrency headroom, and whether auto-recharge will refill it.

**GET** `/account/balance`

Read your organization's wallet: the remaining balance, the minutes
it buys at your rates, your plan, your concurrency headroom, and
whether auto-recharge will refill it.

Use it before a campaign, or on a schedule, so you find out you are
low on credit from this endpoint rather than from a call failing
with `402 payment_required`.

The response always describes the organization the API key belongs
to. There is no parameter for reading another account; resellers
read a client's figures through the Reseller endpoints.

A balance at or below zero does not always mean calls will stop. An
organization on usage-based billing (`plan.is_usage_based`) keeps
placing calls and is metered to its payment method instead, so check
that flag before treating a zero balance as a stop condition.

The API key's user needs Billing access in your organization. If
you get a `403`, an administrator can grant it when Billing is
enabled for your organization; when it is not, contact support.

```yaml
operationId: getAccountBalance
responses:
  '200':
    description: The account's wallet and the limits around it.
    content:
      application/json:
        schema:
          type: object
          description: |
            Your organization's wallet: what is left, what it buys, and the
            limits around it. Every money figure marked USD is USD, because
            that is the currency the balance and all platform rates are held
            in.
          properties:
            success:
              type: boolean
              description: Always `true` on a `200`.
            organization:
              type: object
              properties:
                id:
                  type: integer
                  example: 14
                name:
                  type: string
                  example: Demo Organization
            balance:
              type: object
              properties:
                amount:
                  type: number
                  description: |
                    Remaining balance in USD. Can be negative when an account has
                    been drawn past zero.
                  example: 42.5137
                currency:
                  type: string
                  description: Always `USD`. The balance and every platform rate are held in USD.
                  example: USD
            estimated_minutes_remaining:
              type: number
              nullable: true
              description: |
                How many minutes of conversation the balance buys **at
                `rates_per_minute_usd`**. An estimate at today's rate; rates can
                change.

                It counts the voice-AI rate only. The rate used is the highest
                your calls can bill at, so for web calls the real figure is this
                or better. Phone calls also pay telephony out of the same balance,
                so for phone calls the real figure is lower.

                `null` means no rate is set for your organization, so no honest
                estimate exists. Treat it as unknown rather than as zero or
                unlimited. `0` means the balance buys nothing, which is also the
                answer when the balance is negative.
              example: 212.6
            rates_per_minute_usd:
              type: number
              description: |
                A single rate, not a basic/premium pair: the highest voice-AI rate
                per minute your calls can bill at, in USD. A call bills at your
                premium rate whenever the agent uses a premium model for its
                language, speech-to-text or text-to-speech, which varies per
                agent. Reporting the higher of the two means
                `estimated_minutes_remaining` never overstates your voice-AI
                minutes. Telephony is not included.
              example: 0.2
            outbound_telephony_per_minute_usd:
              type: number
              description: |
                Present only when your account has a negotiated telephony rate.
                When it is absent, telephony is billed at the live carrier rate for
                the destination, which varies by country and is not one number.
              example: 0.0053
            plan:
              type: object
              properties:
                id:
                  type: integer
                  nullable: true
                  example: 3
                name:
                  type: string
                  nullable: true
                  example: Growth
                billing_interval:
                  type: string
                  nullable: true
                  enum:
                    - Monthly
                    - Yearly
                    - One Time
                  example: Monthly
                is_usage_based:
                  type: boolean
                  description: >-
                    When true, calls are metered to your payment method rather than drawn from the
                    wallet.
                  example: false
                subscription_status:
                  type: string
                  nullable: true
                  description: Gateway subscription state, or `null` when the organization has no subscription.
                  example: active
                renews_at:
                  type: string
                  format: date-time
                  nullable: true
                  description: |
                    Start of the next billing period, ISO 8601 UTC. Present only
                    while the subscription is `active`; `null` on a canceled or
                    past-due subscription, where the period end is not a renewal.
                  example: 2026-10-15T09:31:00.000Z
            concurrency:
              type: object
              description: |
                Simultaneous calls. `available` is your real headroom: where a
                further ceiling applies to your account, it is already accounted
                for, so you never need to combine this with anything else.
              properties:
                limit:
                  type: integer
                  example: 10
                in_use:
                  type: integer
                  example: 2
                available:
                  type: integer
                  description: Never negative.
                  example: 8
            auto_recharge:
              type: object
              description: Whether a low balance will top itself up. Never includes the saved instrument.
              properties:
                enabled:
                  type: boolean
                  example: true
                threshold_usd:
                  type: number
                  description: A recharge triggers when the balance drops below this, in USD.
                  example: 5
                amount_usd:
                  type: number
                  description: |
                    Headroom above the threshold, in USD. A recharge restores the
                    balance to `threshold_usd + amount_usd`, so each charge is that
                    target minus the balance at the time, not a fixed amount.
                  example: 20
        example:
          success: true
          organization:
            id: 14
            name: Demo Organization
          balance:
            amount: 42.5137
            currency: USD
          estimated_minutes_remaining: 212.6
          rates_per_minute_usd: 0.2
          plan:
            id: 3
            name: Growth
            billing_interval: Monthly
            is_usage_based: false
            subscription_status: active
            renews_at: '2026-10-15T09:31:00Z'
          concurrency:
            limit: 10
            in_use: 2
            available: 8
          auto_recharge:
            enabled: true
            threshold_usd: 5
            amount_usd: 20
  '401':
    description: Missing or invalid API key.
    content:
      application/json:
        schema:
          type: object
          properties:
            error:
              type: string
              description: Machine-readable error code.
            error_description:
              type: string
              description: Human-readable explanation.
        example:
          error: unauthorized
          error_description: Missing or invalid API key
  '403':
    description: |
      The API key's user does not have Billing access. If Billing is
      enabled for your organization, an administrator can grant it; if it
      is not, contact support.
    content:
      application/json:
        schema:
          type: object
          properties:
            error:
              type: string
              description: Machine-readable error code.
            error_description:
              type: string
              description: Human-readable explanation.
        example:
          error: forbidden
          error_description: >-
            You do not have access to Billing. If Billing is enabled for your organization, an
            administrator can grant it.
```

**Python SDK**

```python
from omnidimension import Client
client = Client(api_key)

response = client.account.balance()
wallet = response["json"]

print(wallet["balance"]["amount"], wallet["balance"]["currency"])
print(wallet["estimated_minutes_remaining"], "minutes left")

if not wallet["plan"]["is_usage_based"] and wallet["balance"]["amount"] <= 0:
    raise SystemExit("Out of credit. Top up before dialing.")
```

**TypeScript SDK**

```javascript
import OmniDimension from "@omnidim-ai/sdk";

const client = new OmniDimension({ apiKey: process.env.OMNIDIM_API_KEY! });
const wallet = await client.account.balance();
console.log(wallet.balance.amount, wallet.balance.currency);
console.log(wallet.estimated_minutes_remaining, "minutes left");

if (!wallet.plan.is_usage_based && wallet.balance.amount <= 0) {
  throw new Error("Out of credit. Top up before dialing.");
}
```

**cURL**

```shell
curl https://omnidim.io/api/v1/account/balance \
  -H "Authorization: Bearer $OMNIDIM_API_KEY"
```

**curl**

```bash
curl -X GET "https://omnidim.io/api/v1/account/balance" \
  -H "Authorization: Bearer $OMNIDIM_API_KEY"
```