Skip to content

Latest commit

 

History

History
252 lines (191 loc) · 9.68 KB

File metadata and controls

252 lines (191 loc) · 9.68 KB
title Understanding Call Concurrency
subtitle Plan, monitor, and scale simultaneous Vapi calls
slug calls/call-concurrency
description Learn how concurrency slots work, how to stay within the default limit, and how to raise capacity for larger campaigns.

Overview

Call concurrency represents how many Vapi calls can be active at the same time. Each call occupies one slot, similar to using a finite set of phone lines.

In this guide, you'll learn to:

  • Understand how concurrency is allocated at the account level
  • Keep outbound and inbound workloads within plan limits
  • Scale capacity through Dashboard add-ons, startup programs, or enterprise plans
  • Inspect concurrency data through API responses and analytics queries
  • Apply best practices for high-volume operations

How concurrency works

Every Vapi account includes 10 concurrent call slots by default. When all slots are busy, new outbound dials or inbound connections are blocked until a slot becomes free.

Account-level allocation

Concurrency is an account-level limit, not a per-phone-number or per-assistant limit. All calls across your organization draw from the same pool:

Phone calls and SIP connections that reach your assistants. Calls your application initiates through the API or campaigns. Browser-based sessions using the Vapi Web SDK.

A single pool of 10 slots is shared across all three call types. If 6 inbound calls and 3 outbound calls are active, only 1 slot remains for any new call regardless of type.

Organization pool sharing

When multiple organizations share the same billing subscription, they share the same concurrency pool. A call on Organization A counts against the same limit as a call on Organization B.

If your inbound and outbound workloads compete for slots, consider separating them into different organizations under the same subscription. This does not increase total capacity, but lets you monitor and manage each workload independently.

Scaling your concurrency

Vapi offers several paths to increase concurrency beyond the default 10 slots.

Tier Concurrent slots How to access
Default 10 Included with every account
Self-serve add-ons Up to hundreds Dashboard billing page, $10 per line per month
Startup program 100 Apply through the Vapi startup program
Enterprise Custom Contact Vapi sales for dedicated capacity
Platform scale 1,000+ Available for enterprise customers with reserved infrastructure

Purchase add-on lines

You can raise your concurrency limit without contacting support:

Go to the [Vapi Dashboard](https://dashboard.vapi.ai/settings/billing) and navigate to **Settings > Billing**. Locate the **Reserved Concurrency (Call Lines)** section on the billing page. Add the number of extra lines you need. Each additional line costs **$10 per month**. Changes apply immediately. New slots are available for your next call.

Startup program

The Vapi startup program provides 100 concurrent call lines to qualifying early-stage companies. Visit the Vapi startup program page to check eligibility and apply.

Enterprise plans

Enterprise customers can negotiate custom concurrency allocations that include:

  • Dedicated infrastructure for consistent performance at scale
  • Concurrency levels above 1,000 simultaneous calls
  • Priority support for capacity planning

Contact Vapi sales to discuss enterprise concurrency needs.

Managing concurrency

Outbound campaigns

Batch long lead lists into smaller chunks (for example, 50-100 numbers) and run those batches sequentially. This keeps your peak concurrent calls near the default limit while still working through large sets quickly.

High-volume operations

If you regularly exceed 50,000 minutes per month, talk with Vapi about:

  • Custom plans that include higher baked-in concurrency
  • Add-on bundles that let you purchase extra call lines only when you need them
Use billing reports to pair minute usage with concurrency spikes so you can upgrade before calls are blocked.

Separate inbound and outbound workloads

For production deployments where inbound availability is critical, create separate organizations for inbound and outbound traffic under the same subscription. This approach:

  • Prevents outbound campaign surges from blocking incoming customer calls
  • Gives each workload its own concurrency monitoring
  • Simplifies capacity planning for each use case

View concurrency in call responses

When you create a call with POST /call, the response includes a subscriptionLimits object that shows the current state of your account.

Example request

curl 'https://api.vapi.ai/call' \
  -H 'authorization: Bearer {VAPI-PRIVATE-TOKEN}' \
  -H 'content-type: application/json' \
  --data-raw '{
    "assistantId": "4a170597-a0c2-4657-8c32-cb93f080cead",
    "customer": {"number": "+918936850777"},
    "phoneNumberId": "c6ea6cb0-0dfb-4a65-918f-6a33abb54b64"
  }'

Example response snippet

{
  "subscriptionLimits": {
    "concurrencyBlocked": false,
    "concurrencyLimit": 10,
    "remainingConcurrentCalls": 9
  },
  "id": "019a9046-121e-766d-bd1f-84f3ccc309c1",
  "status": "queued"
}

Field reference

  • concurrencyBlockedtrue if the call could not start because all slots were full.
  • concurrencyLimit — Total concurrent call slots currently available to your org.
  • remainingConcurrentCalls — How many slots were open at the time you created the call.

Build monitoring around these values to alert when you approach the cap.

Track concurrency with the Analytics API

Use the /analytics endpoint to review historical concurrency usage and spot patterns that justify more capacity.

Example request

curl 'https://api.vapi.ai/analytics' \
  -H 'authorization: Bearer {VAPI-PRIVATE-TOKEN}' \
  -H 'content-type: application/json' \
  --data-raw '{
    "queries": [{
      "name": "Number of Concurrent Calls",
      "table": "subscription",
      "timeRange": {
        "start": "2025-10-16T18:30:00.000Z",
        "end": "2025-11-17T05:31:10.184Z",
        "step": "day"
      },
      "operations": [{
        "operation": "max",
        "column": "concurrency",
        "alias": "concurrency"
      }]
    }]
  }'

Example response

[{
  "name": "Number of Concurrent Calls",
  "timeRange": {
    "start": "2025-10-16T18:30:00.000Z",
    "end": "2025-11-17T05:31:10.184Z",
    "step": "day",
    "timezone": "UTC"
  },
  "result": [
    { "date": "2025-11-05T00:00:00.000Z", "concurrency": 0 },
    { "date": "2025-11-10T00:00:00.000Z", "concurrency": 1 },
    { "date": "2025-11-17T00:00:00.000Z", "concurrency": 1 }
  ]
}]

Adjust the timeRange.step to inspect usage by hour, day, or week. Peaks that align with campaign launches, seasonality, or support events highlight when you should reserve additional call lines.

Video walkthrough

Watch a walkthrough of concurrency management and scaling in the Vapi Dashboard:

<iframe width="560" height="315" src="https://www.youtube.com/embed/iWZD_HBk9zQ" title="Vapi Concurrency Management" frameBorder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowFullScreen />

FAQ

Concurrency is an **account-level limit**. All calls across every phone number, assistant, and call type (inbound, outbound, web) share the same pool of slots. New calls receive a `concurrencyBlocked: true` response and do not connect. For inbound calls, the caller hears a busy signal or your telephony provider's default behavior. Monitor the `remainingConcurrentCalls` field to avoid this. Add-on lines purchased through the Dashboard billing page activate **immediately**. No restart or configuration change is needed. Yes. Web calls initiated through the Vapi Web SDK consume concurrency slots from the same account-level pool as phone-based inbound and outbound calls. Organizations under the same billing subscription share a single concurrency pool. A call on one organization reduces available slots for all organizations on that subscription. Check the `subscriptionLimits` object returned with every `POST /call` response. For historical trends, use the Analytics API with the `subscription` table and `concurrency` column.

Next steps