Calls Per Second (CPS)
Calls Per Second (CPS)
Calls per second (CPS) is how many new outbound calls the platform is allowed to start each second.
It is easy to confuse with concurrency, so here is the difference in one line: concurrency is how many calls can run at the same time. CPS is how fast new ones can begin. Both limits apply together.
Example. You launch a campaign of 5,000 contacts with 2 CPS and 50 concurrency. The platform starts two calls every second. After 25 seconds all 50 seats are full. From then on, every time a call ends and frees a seat, a new call starts, but never more than two in any second.

CPS only applies to outbound calls, the ones the platform dials: API calls, campaigns, automatic retries, and test calls. Inbound calls are not paced. They arrive at whatever speed people call you.
Why CPS exists
Every phone carrier has a limit on how many calls it will accept per second on a trunk. If you send more than that, the carrier rejects the extra calls. Those calls never connect, and they show up as failures in your reports. If it keeps happening, the carrier may throttle or suspend the trunk.
Before CPS, the only protection was to slow down on your side: send calls to our API a few at a time so you never exceeded your carrier’s limit. That is fiddly, and it wastes the queue.
With CPS you do the opposite. Send us everything at once. Push 10,000 calls in one go, tell us the rate your carrier accepts, and we hold the calls in a queue and release them at exactly that rate. Nothing is dropped. Calls simply wait their turn.
CPS is included with your plan at no extra cost. You pay for concurrency, not for pacing.
Where the limit comes from
Your phone numbers come from one of two places, and the CPS limit is set differently for each. The Calls per second (CPS) section of the Concurrency page shows them as two groups, using the same names as below.
Numbers you rent from Smallest, on our Plivo or Twilio accounts. We own the carrier relationship, so the rate is set for you, one per provider. You can see it but not change it in the dashboard.
Numbers you brought over SIP from your own carrier. You own the carrier relationship, so you set the rate to match what your carrier allows. Org admins can edit it.
Rented numbers (Smallest telephony)
One rate per provider. Each provider’s rate covers all your rented numbers on it. If you rent eight Plivo numbers, they share the Plivo rate. They do not get one each.
Each provider card shows one of two messages:
- “Reserved for your organization. Contact support to change it.” A rate that is yours alone. In the screenshot above, Plivo is reserved at 5 calls/sec and Twilio at 1 calls/sec.
- “Standard plan rate. Contact support to reserve dedicated CPS.” The shared rate that comes with your plan, when you have no reservation.
Either way, changing it is a plan setting, not a dashboard toggle. Contact support.
Imported numbers (Your SIP trunks)
Imported numbers dial through your own carrier and are grouped by SIP trunk. A trunk is identified by its address, for example 43.205.53.11:5091 in the screenshot. The row shows how many numbers are on it (1 number on this trunk) and its rate in calls/sec. Every number on a trunk shares that one rate.
This grouping matters. Carriers enforce CPS on the trunk, not on each number. If 30 of your numbers sit on one trunk that accepts 2 calls/sec, all 30 together must stay under 2 calls/sec. Pacing each number at 2 would hit the trunk with 60 attempts a second.
Set each trunk’s CPS to what your carrier actually allows. If you are not sure, ask your carrier before you raise it. This number is what protects you from rejected calls. Every new trunk starts at 1 call/sec, the safe default when the real limit is unknown.
Numbers imported against the same address join the same trunk and inherit its rate. Small differences in how you type the address do not create a new trunk: sip:trunk.example.com:5060;transport=udp and trunk.example.com:5060 are treated as the same trunk. A different port is treated as a different trunk, because it can genuinely be a different endpoint.
Setting a trunk’s CPS
Open the Concurrency page
In the sidebar under Configure, click Concurrency and scroll down to Calls per second (CPS). Rented numbers are shown first. Imported numbers are listed below, one row per SIP trunk, with the numbers on it.
Only org admins can change a trunk’s CPS. Members can view the page. This is the same rule as for concurrency reservations, because a wrong value can cause your carrier to reject calls for the whole organization.
Changes apply within about a second
A CPS change applies to calls already waiting in the queue, not only to new ones. If you lower a trunk from 20 to 2 in the middle of a campaign, the calls already queued slow to 2 per second within about a second. Raising the rate speeds them up just as quickly.
This is useful when something goes wrong. If your carrier starts rejecting calls, lower the rate and the queue respects it immediately.
The rate belongs to the trunk, so one edit changes every number on it. You never edit numbers one at a time.
What happens when you send calls faster than the rate
Nothing is dropped. Calls that arrive faster than the rate allows wait in the queue and start as the rate permits, in the order you sent them. A burst of 600 calls on a 4 calls/sec trunk finishes starting in about 150 seconds.
Two different limits can hold a call back. Here is how to tell them apart:
Planning your total rate
Some carriers cap CPS across your whole account, not only per trunk. If yours does, watch Total across trunks and keep it within that limit. The page says the same thing under the trunk list: “If your provider limits CPS across your whole account, keep the total above within that limit.”
Adding a trunk raises the total. If your carrier’s account limit is 10 calls/sec and you already have two trunks at 5 each, importing a number on a third trunk at the default 1 call/sec puts you at 11.
Managing CPS through the API
Both endpoints use the standard Atoms API base URL and your API key. See API Keys. Full request and response schemas are in the API reference: Get CPS limits and Set a SIP trunk’s CPS.
View your CPS settings
Returns your rented-number rate per provider, your SIP trunks with the numbers on each, and the total across trunks:
For a provider, cpsLimit: null with isUnlimited: false means you have no reservation and are on your plan’s standard rate. isUnlimited: true means an unlimited reservation.
Each entry in numbers is one phone number on the trunk. trunkId is the id of the SIP trunk record that number belongs to, and name is the trunk record’s name, which is generated automatically when you import.
Set a trunk’s CPS
The response tells you how many trunk records were updated:
Errors come back as { "status": false, "errors": ["..."] }.
There is no endpoint for rented-number rates. Those are plan settings. Contact support to change them.
Good habits
Ask your carrier for the real number
The most useful thing you can do is find out what your trunk actually accepts and set exactly that. Guessing high causes rejected calls. Guessing low only makes campaigns slower than they need to be.
Stop throttling on your side
If you currently send requests slowly to protect your trunk, you can stop. Set the trunk’s CPS and send everything at once. The queue does the pacing, and you get better throughput because the queue is always full.
Set the rate before a big campaign
A campaign submits its contacts quickly. Set the trunk’s CPS first, so the whole batch is paced correctly from the first call.
Size CPS and concurrency together
CPS controls how fast calls start. Concurrency controls how many run together. A high CPS with low concurrency starts calls fast and then makes them wait for a seat anyway. See Concurrency for reserving seats per agent.
Watch the total if your carrier caps your account
Per-trunk limits protect each trunk, but they do not stop the sum from going over an account-level cap. Check Total across trunks whenever you add a trunk.
FAQ
What is the difference between CPS and concurrency?
CPS limits how fast new calls start. Concurrency limits how many calls run at the same time. A call needs both: the trunk must be within its CPS rate, and there must be a free concurrency seat.
Are calls dropped if I go over the CPS limit?
No. They wait in the queue and start in order as the rate allows. CPS changes when a call starts, never whether it happens.
How quickly does a CPS change take effect?
Within about a second, and it applies to calls already queued, not only new ones.
I typed the trunk address differently for two numbers. Are they one trunk or two?
One trunk, as long as the host and port match. The scheme prefix (sip:), capitalisation, and URI parameters such as ;transport=udp are ignored. Different ports are different trunks.
What rate does a new trunk start at?
1 call/sec. It is the safe floor when the real limit is unknown. A number imported onto a trunk you already have inherits that trunk’s rate.
What is the maximum CPS I can set?
50 calls/sec per trunk. If your carrier supports more and you need it, contact support.
Can I switch pacing off for a trunk?
No. Every trunk is paced, with a minimum of 1 call/sec. An unpaced trunk is exactly what gets calls rejected by the carrier.
Can I set CPS per number instead of per trunk?
No, and it would not protect you. The carrier’s limit is on the trunk, so only a rate shared by every number on that trunk keeps you under it.
Who can change CPS?
Org admins, the same people who can set concurrency reservations. Members can view the Concurrency page, and the API returns 403 if a member tries to update a trunk.
Does CPS apply to inbound calls?
No. Inbound calls arrive at whatever speed people dial you and cannot be queued. Use concurrency to plan inbound capacity.
Does CPS apply to campaigns and retries?
Yes. Every outbound call the platform starts is paced by the same trunk rate: single API calls, campaign dials, automatic retries, and test calls.
Can I change the CPS for my rented Smallest numbers?
Not from the dashboard. Those rates come from your plan because we own the carrier relationship. Contact support to change them.
My campaign is slower than expected. Is CPS the cause?
Check which limit you are hitting. Calls starting slowly but steadily in order points to CPS. Calls starting fast and then stalling points to concurrency. Also compare Total across trunks with any account-level cap your carrier has.

