What concurrency means
Concurrency is the number of active conversations running at the same moment. One concurrent call holds an LLM inference instance, a TTS streaming instance, an STT instance, and a telephony channel for as long as the conversation lasts. When the call ends, the slot frees immediately.
Concurrency is not calls per day. A Finn running 5 concurrent slots with two-minute calls completes roughly 150 calls per hour. Day and month caps are counted separately and enforced separately.
Plan limits
| Plan | Max concurrent (per Finn) | Max concurrent (account-wide) | Max calls per day | Max calls per month |
|---|---|---|---|---|
| Starter | 5 | 5 | 1,000 | 10,000 |
| Growth | 50 | 200 | 25,000 | 250,000 |
| Scale | 500 | 1,000 | 100,000 | 2,000,000 |
| Enterprise | Custom | Custom (5,000+) | Custom | Custom |
Two ceilings apply at once. A Growth account can run 200 concurrent calls total but no more than 50 through any single Finn. Splitting traffic across several Finns is how you use the account-wide headroom. See agents-overview.
The per-Finn limit exists because one Finn presents as one contact identity. Several hundred simultaneous dials from one identity produces a call pattern that does not look like a real business.
Estimating your peak
peak concurrent ≈ (calls per hour) × (average duration in minutes) / 60
A campaign of 1,000 calls at 2 minutes average, spread over 4 hours, is 250 calls/hour, so about 8 concurrent. An inbound clinic taking 30 calls/hour at lunch with 4-minute calls peaks near 2 concurrent.
Most accounts run under 100 concurrent in production. Start on a lower tier, measure real peaks in monitoring, and upgrade after you have numbers.
Phone numbers are usually the real limit
Platform capacity is rarely what stops a high-concurrency outbound run. Carriers cap simultaneous outbound calls per number.
| Region | Max concurrent outbound per number |
|---|---|
| US/Canada | ~50 |
| UK | ~30 |
| EU (most) | ~20 |
| India | ~10 |
| Other | varies, often ~5-15 |
These are carrier-imposed. Exceed them and the destination carrier rejects the calls. Rejections count as failed attempts against your contacts, so an undersized pool burns list quality, not just throughput.
pool size ≈ peak concurrent / per-number limit × 1.5
500 concurrent US outbound needs about 15 numbers. Buy pools in the dashboard under phone numbers, not through the API. See phone-numbers and outbound-campaigns.
What happens when you hit the ceiling
Outbound and inbound behave differently.
| Direction | Behavior past the limit |
|---|---|
| Outbound | New calls queue instead of failing. The queue drains as active calls complete. |
| Inbound | New calls get a busy tone or the number's fallback voicemail, configured per number. |
Both cases raise a yellow warning banner in the dashboard. Recurring banners mean the tier is undersized, not that something is broken. Inbound overflow is silent from the caller's side, so treat repeated banners on an inbound number as lost calls. Configure the fallback per number in inbound-routing.
The platform allows up to 20% above your concurrent limit for short bursts under 15 minutes. Sustained burst gets throttled. For a planned one-time spike, contact support 48 hours ahead so capacity is provisioned in advance.
Request rate limits
Concurrency limits calls. Separate limits govern API and webhook traffic.
| Action | Default limit | Plan overrides |
|---|---|---|
| API requests (per key) | 100 req/min | Up to 1,000/min on Scale, unlimited on Enterprise |
| Webhook deliveries (per endpoint) | 50 req/sec | Up to 500/sec on Scale |
| Audience bulk imports | 100,000 contacts per upload | Higher on Scale and above |
| Test calls (per Finn) | 30/hour | Same across plans |
| New deployments launched | 10/hour | 50/hour on Scale and above |
Rate-limited requests return 429 Too Many Requests with a Retry-After header.
curl -i -X POST https://api.hirefinn.ai/v1/calls \
-H "Authorization: Bearer $FINN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"finn_id": "finn_abc123", "to": "+14155550123"}'
HTTP/1.1 429 Too Many Requests
Retry-After: 12
Honor Retry-After rather than retrying on a fixed interval. Tight retry loops keep the key rate-limited. See api-rate-limits and api-errors.
Quality under load
The latency target is under 800ms from end of caller speech to start of Finn response, and it holds at 1 call or 1,000 concurrent. Load is not what degrades a call. These are.
| Cause | Effect | Fix |
|---|---|---|
| Cross-region calling | +100-300ms per hop | Regional accounts (Enterprise), or accept it |
| Premium voice tier under load | Higher TTS variance | Standard voices are steadier under load |
| Knowledge base over 500 MB | Slower retrieval | Trim to smaller, focused files |
| 0 to 100 concurrent in seconds | Cold-start spike on the first few calls | Run scheduled test calls before the spike |
Region is chosen at account creation and cannot be changed later without data migration. See data-residency.