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

# Make large campaign calls async (Beta)

> Start outbound calls for a beta large campaign after upload processing and balance checks.

<Warning>
  This endpoint is beta. Use it only after [Get large campaign upload status](/api-reference/endpoint/campaign/get-large-campaign-upload-status) shows processing is complete and [Check large campaign balance](/api-reference/endpoint/campaign/check-large-campaign-balance) confirms sufficient balance.
</Warning>

`POST /campaign/make-call-async` queues outbound calls for a beta large campaign. Use it instead of `POST /campaign/start` for 5,000+ row campaigns created with `POST /campaign/upload-csv`.

## Endpoint

```text theme={null}
POST /campaign/make-call-async
```

## Request body

Send JSON.

| Field          | Required | Description                                                      |
| -------------- | -------- | ---------------------------------------------------------------- |
| `agent_id`     | Yes      | Assistant that will handle the campaign calls                    |
| `bulk_list_id` | Yes      | Large campaign list ID returned by `POST /campaign/upload-csv`   |
| `from_numbers` | Yes      | Workspace caller numbers or number IDs to use for outbound calls |
| `callback_url` | No       | URL that should receive post-call events, if configured          |

```bash theme={null}
curl --request POST "https://prod-api.ringg.ai/ca/api/v0/campaign/make-call-async" \
  --header "X-API-KEY: $RINGG_API_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "agent_id": "your-agent-id",
    "bulk_list_id": "your-bulk-list-id",
    "from_numbers": ["your-from-number-id"],
    "callback_url": "https://api.example.com/ringg/campaign-callback"
  }'
```

## Response guidance

A successful response means the large campaign was accepted for async scheduling.

```json theme={null}
{
  "bulk_list_id": "123e4567-e89b-12d3-a456-426614174000",
  "status": "scheduled",
  "message": "Large campaign calls queued"
}
```

Avoid submitting the same `bulk_list_id` more than once unless a previous attempt clearly failed.

## Next step

Monitor progress with [Get all campaigns](/api-reference/endpoint/campaign/get-all-campaigns) and inspect call rows with [Get call history](/api-reference/endpoint/history/get-call-history) filtered by the same `bulk_list_id`.


## OpenAPI

````yaml post /campaign/make-call-async
openapi: 3.0.0
info:
  title: Ringg AI API Documentation
  description: >-
    This is the documentation for the Ringg AI APIs. The Ringg AI API follows
    RESTful principles, making it intuitive and easy to integrate with your
    applications. All API requests should be made to the base URL. The API
    accepts and returns data in JSON format. Ensure your requests include the
    appropriate Content-Type header for POST and PATCH requests.
  version: 2.0.0
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 assistants (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/make-call-async:
    post:
      tags:
        - campaign
      summary: Start Large Campaign Calls (Beta)
      description: >-
        Beta endpoint for starting calls from a draft bulk list created by
        /campaign/upload-csv.
      operationId: makeCampaignCallAsyncBeta
      parameters:
        - name: X-API-KEY
          in: header
          description: (Required) Your Ringg AI API key.
          required: true
          schema:
            type: string
            example: 7251cb4b-3373-43a4-844c-b27a1d45e0c9
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - bulk_list_id
                - agent_id
                - country_code
                - campaign_start_time
                - campaign_end_time
                - call_config
              properties:
                bulk_list_id:
                  type: string
                  description: Draft bulk list ID returned by /campaign/upload-csv.
                  example: 123e4567-e89b-12d3-a456-426614174000
                agent_id:
                  type: string
                  description: Assistant ID used during upload.
                  example: 830f767a-397e-4b39-82ff-235cd344e2f9
                country_code:
                  type: string
                  description: Phone number country code.
                  example: '+91'
                campaign_start_time:
                  type: string
                  description: Campaign start time in DD/MM/YYYY, HH:MM format.
                  example: 18/10/2026, 09:00
                campaign_end_time:
                  type: string
                  description: Campaign end time in DD/MM/YYYY, HH:MM format.
                  example: 18/10/2026, 18:00
                from_numbers:
                  type: array
                  items:
                    type: string
                  description: >-
                    Explicit list of FromNumber UUIDs / phone numbers. **Provide
                    exactly one of from_numbers or number_pool_id.**
                  example:
                    - from-number-id
                  nullable: true
                number_pool_id:
                  type: string
                  description: >-
                    Managed number pool ID (rotation, spam skipping,
                    auto-purchase). **Provide exactly one of from_numbers or
                    number_pool_id.**
                  example: pool-uuid-here
                  nullable: true
                call_config:
                  type: object
                  properties:
                    call_retry_config:
                      type: object
                      properties:
                        retry_count:
                          type: integer
                          default: 0
                          example: 1
                        retry_busy:
                          type: integer
                          default: 30
                          example: 30
                        retry_not_picked:
                          type: integer
                          default: 30
                          example: 30
                        retry_failed:
                          type: integer
                          default: 30
                          example: 30
                    call_time:
                      type: object
                      properties:
                        call_start_time:
                          type: string
                          default: '08:00'
                          example: '09:00'
                        call_end_time:
                          type: string
                          default: '20:00'
                          example: '18:00'
                        timezone:
                          type: string
                          default: Asia/Kolkata
                          example: Asia/Kolkata
                        scheduled_at:
                          type: string
                          nullable: true
                          description: >-
                            ISO 8601 datetime for scheduled call (e.g.
                            '2026-10-18T09:00:00'). Uses the timezone above.
                          example: null
                concurrency_percentage:
                  type: integer
                  minimum: 0
                  maximum: 100
                  default: 0
                  example: 25
                callback_url:
                  type: string
                  nullable: true
                  example: https://api.example.com/ringg/campaign-callback
                email_completion_user_ids:
                  type: array
                  items:
                    type: string
                  nullable: true
              description: >-
                **Exactly one of from_numbers or number_pool_id must be
                provided.** Sending both or neither results in a 422.
      responses:
        '200':
          description: Large campaign call creation accepted.
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
                  bulk_list_id:
                    type: string
                  status:
                    type: string
                example:
                  message: Campaign calls scheduled
                  bulk_list_id: 123e4567-e89b-12d3-a456-426614174000
                  status: scheduled
        '400':
          description: Bad Request - Invalid input.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    example: Bulk list is not ready to start.
        '401':
          description: Unauthorized - Invalid or missing authentication.

````