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

> ## Agent Instructions
> To search or read these docs, connect the Ringg docs MCP server at https://docs.ringg.ai/mcp (no key needed; tools search_ringg_ai and query_docs_filesystem_ringg_ai) instead of browsing pages one by one. Setup for each client: https://docs.ringg.ai/resources/mcp-server/docs-mcp-server/mcp-for-ai-assistants.md
> The dashboard labels agents "Assistants"; these docs say "agent". Both mean the same object, identified by agent_id.
> API base URL: https://prod-api.ringg.ai/ca/api/v0. Send the workspace API key in the X-API-KEY header, from server-side code only.
> Placing a call dials a real phone number and spends credits. Confirm the number with the user before calling.
> To act on a Ringg workspace (place calls, edit agents, read transcripts), use the separate Ringg workspace MCP server at https://mcp.ringg.ai/mcp: https://docs.ringg.ai/resources/mcp-server/workspace-mcp-server/overview.md

# Check large campaign balance (Beta)

> Re-check the workspace balance for a large campaign that stopped at insufficient_balance, after a top-up, so it returns to draft and calls can start.

export const RelatedTopics = ({items}) => <div className="not-prose mt-12">
    <div className="text-sm font-medium text-gray-500 dark:text-zinc-400 mb-3">Related topics</div>
    <div className="flex flex-col gap-2.5">
      {items.map(([title, href]) => <a key={href} href={href} className="flex items-center gap-2.5 text-sm text-gray-700 hover:text-gray-950 dark:text-zinc-300 dark:hover:text-white">
          <Icon icon="file-text" size={16} color="currentColor" />
          {title}
        </a>)}
    </div>
  </div>;

Add balance first ([Billing](/documentation/manage-account/billing)), then call it with the `bulk_list_id` from [upload status](/api-reference/calling/large-campaigns/get-large-campaign-upload-status). When the response's `status` is `draft`, [start calls](/api-reference/calling/large-campaigns/make-large-campaign-calls-async) again with the same `bulk_list_id`; there is no need to upload the list again.

If the balance is still short, `status` stays `insufficient_balance` and the response gives `required_credits` and `additional_balance_required`. A campaign in another status, or with no contacts or agent, returns `400`. [Get all campaigns](/api-reference/calling/campaigns/get-all-campaigns) runs the same check on every `insufficient_balance` campaign it lists.

<RelatedTopics items={[["Run a campaign by API", "/documentation/deploy/campaigns/campaigns-by-api#large-campaign-flow"]]} />


## OpenAPI

````yaml post /campaign/check-balance/{bulk_list_id}
openapi: 3.0.0
info:
  title: Ringg AI API Documentation
  description: >-
    The Ringg AI REST API. Base URL https://prod-api.ringg.ai/ca/api/v0; send
    your workspace API key in the X-API-KEY header from server-side code only.
    Requests and responses are JSON.
  version: 2.0.0
  contact:
    name: Ringg AI support
    email: admin@ringg.ai
    url: https://docs.ringg.ai
servers:
  - url: https://prod-api.ringg.ai/ca/api/v0
security: []
tags:
  - name: workspace
    description: Endpoints for managing your workspace.
  - name: agent
    description: Endpoints for managing agents.
  - name: calling
    description: Endpoints for making and managing calls.
  - name: campaign
    description: Endpoints for managing campaigns.
  - name: analytics
    description: Endpoints for accessing call analytics and performance metrics.
  - name: termination
    description: Endpoints for terminating active calls using different methods.
  - name: knowledgebase
    description: Endpoints for managing knowledge bases.
paths:
  /campaign/check-balance/{bulk_list_id}:
    post:
      tags:
        - campaign
      summary: Check Campaign Balance (Beta)
      description: >-
        Beta endpoint for re-checking the balance of a campaign in
        `insufficient_balance` after a top-up. When the balance now covers it,
        the campaign returns to `draft`; then send /campaign/make-call-async
        again.
      operationId: checkCampaignBalanceBeta
      parameters:
        - name: X-API-KEY
          in: header
          description: (Required) Your Ringg AI API key.
          required: true
          schema:
            type: string
            example: rg_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
        - name: bulk_list_id
          in: path
          required: true
          description: Bulk list ID to re-check.
          schema:
            type: string
      responses:
        '200':
          description: >-
            Balance checked. `status` is `draft` when the campaign can start, or
            still `insufficient_balance`.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    enum:
                      - draft
                      - insufficient_balance
                  message:
                    type: string
                  bulk_list_id:
                    type: string
                    description: When `status` is `draft`.
                  total_callees:
                    type: integer
                    description: 'When `status` is `draft`: valid contacts in the campaign.'
                  required_credits:
                    type: number
                    description: >-
                      When `status` is `insufficient_balance`: estimated cost of
                      the campaign.
                  additional_balance_required:
                    type: number
                    description: >-
                      When `status` is `insufficient_balance`: how much more
                      balance is needed.
              examples:
                ready:
                  summary: Balance now covers the campaign
                  value:
                    status: draft
                    message: >-
                      Balance is sufficient. You can now start the campaign via
                      /make-call-async.
                    bulk_list_id: 123e4567-e89b-12d3-a456-426614174000
                    total_callees: 4988
                still_short:
                  summary: Balance still too low
                  value:
                    status: insufficient_balance
                    message: Insufficient balance to start this campaign.
                    required_credits: 2500
                    additional_balance_required: 1250
        '400':
          description: >-
            Bad Request - The campaign is not in `insufficient_balance`, has no
            contacts, or has no agent.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
        '401':
          description: Unauthorized - Invalid or missing authentication.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                    example: Invalid credentials
        '404':
          description: Bulk list not found.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.