Each Edesy termination trunk has a max concurrent calls setting, from 1 to 10,000, with a default of 50. It caps how many calls the trunk carries at the same time. When a new outbound call would go over a limit, Edesy declines it at the SIP layer with a clear response code, so your PBX or platform can retry or fail over.
Set the limit#
In the portal, set Max concurrent calls when you create the trunk, or change it later from the trunk page. With the API:
curl -X PATCH https://voice-api.edesy.in/v1/trunks/TRUNK_ID \
-H "Authorization: Bearer sk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"max_concurrent_calls": 100}'
Match it to the channel count on your side. In FreePBX, set the trunk's Maximum Channels to the same value.
Max call duration#
Each trunk also has a maximum call duration for outbound calls. It stops a call that never hangs up, for example an AI voice agent stuck in a loop or a PBX that missed the end of the call, from running up minutes.
| Item | Detail |
|---|---|
| Where | Trunk page > Call limits card > Maximum call duration (minutes) |
| Range | 1 minute up to the platform maximum of 60 minutes |
| Default | Empty, which means the platform maximum (60 minutes) |
| Applies to | Outbound calls through this trunk |
| At the limit | Edesy ends the call with a SIP BYE to both sides |
| Earlier end | A call can also end sooner if the wallet balance only covers a shorter call |
With the API, send the limit in seconds; 0 means the platform maximum:
curl -X PATCH https://voice-api.edesy.in/v1/trunks/TRUNK_ID \
-H "Authorization: Bearer sk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"max_call_duration_sec": 900}'
The trunk object returns max_call_duration_sec and platform_max_call_duration_sec. Pick a limit a little above your longest normal call: for a voice agent that books appointments in 3 to 5 minutes, 10 or 15 minutes is a safe cap.
Limits that can decline a call#
| Limit | SIP response | What to do |
|---|---|---|
| Workspace concurrent calls reached | 503 Channel Limit Reached |
Wait for calls to end, or ask support to raise your allowance |
| Workspace call rate (new calls per second) reached | 503 Call Rate Limit Exceeded |
Pace new calls, or ask support for a higher rate |
| Wallet cannot cover the call | 402 Payment Required |
Top up the wallet |
| Caller ID not owned by you | 403 Caller ID Not Authorized |
Send an Edesy number you own as From |
| No destination number | 400 Missing Destination |
Put the dialled number in the Request-URI |
All of these happen before the call is placed, so a declined call costs nothing. See Common SIP Response Codes for the full list.
Suspend a trunk#
Set status to suspended to stop a trunk without deleting it, and back to active to resume:
curl -X PATCH https://voice-api.edesy.in/v1/trunks/TRUNK_ID \
-H "Authorization: Bearer sk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"status": "suspended"}'
Test calls are disabled while a trunk is suspended.
FAQ#
Does an inbound call count toward my concurrent calls?#
Inbound calls are counted toward the workspace total but are never declined for it. A busy inbound period can therefore cause new outbound calls to get 503 Channel Limit Reached.
Is there a charge for a higher channel limit?#
The per-trunk cap is free to change. For a higher workspace-wide allowance, contact us.
Why do my calls stop at 50?#
50 is the default per-trunk cap. Raise max_concurrent_calls on the trunk.
What is the longest call a trunk allows?#
60 minutes, the platform maximum. Set a lower limit per trunk on the Call limits card.
Is a call cut off at the limit charged?#
Yes, for the minutes it was connected, at the normal per-minute rate. The limit stops further minutes.
Do test calls count toward the limits?#
Test calls from the portal are exempt from the channel limits, but are limited to 5 per hour per workspace.