Hello LiveKit Support Team,
I am currently building a multi-tenant AI calling platform using LiveKit. We are currently evaluating LiveKit Cloud versus self-hosting and would like to clarify a few architectural and scalability questions before moving to production.
Our platform will be used by multiple organizations, and each organization may have its own phone numbers and SIP providers. We are currently planning to support Twilio and Plivo.
Our architecture is roughly:
- Our own AI agents
- LiveKit Rooms
- WebRTC
- SIP
- VAD / AMD and other call-handling/tuning techniques
- Noise cancellation, including Krisp where applicable
- We are not planning to deploy our AI agents on LiveKit; the agents will be managed by our own infrastructure.
Could you please help us with the following?
1. LiveKit Cloud concurrency on the Free tier
We are currently using the LiveKit Cloud Free tier.
Our application will serve multiple organizations/users. Could you clarify:
- How many simultaneous/concurrent SIP calls can a Free-tier project handle?
- Are there any concurrency limits specifically for SIP calls?
- Does the concurrency limit apply at the project level, or per user/organization?
- Are WebRTC participants and SIP calls counted differently?
2. Recommended plan vs self-hosting
Our expected production scale is approximately:
- 5,000 calls/day
- Up to approximately 5 concurrent calls per organization/user
- Multiple organizations using the platform simultaneously.
Which approach would you recommend:
- LiveKit Cloud, and if so, which plan?
- Self-hosted LiveKit?
- A combination of LiveKit Cloud and our own infrastructure?
We would particularly like to understand the expected concurrency limits, SIP limitations, bandwidth considerations, and approximate cost implications at this scale.
3. Our own AI agents
We are building and hosting our own AI agents.
We intend to use LiveKit primarily for:
- WebRTC
- SIP connectivity
- LiveKit Rooms
- Audio streaming/media transport
- VAD and call-control functionality where provided
- AMD where supported
- Noise cancellation/Krisp where available.
Could you clarify which of these capabilities are subject to LiveKit Cloud usage/concurrency limits, and which are handled entirely by our own infrastructure?
4. Multi-tenant SIP trunk architecture
Our platform is multi-tenant, with potentially hundreds or thousands of organizations.
We are considering creating a separate LiveKit SIP trunk for each organization.
For example:
Organization A
└── Twilio numbers
└── LiveKit SIP Trunk A
Organization B
└── Twilio numbers
└── LiveKit SIP Trunk B
Organization C
└── Plivo numbers
└── LiveKit SIP Trunk C
Is this a recommended/ supported architecture?
Can multiple phone numbers belonging to the same SIP provider be assigned to a single LiveKit SIP trunk for one organization?
5. Number limits per SIP trunk
How many phone numbers can be associated with a single LiveKit SIP inbound/outbound trunk?
Are there:
- Hard limits?
- Soft limits?
- Recommended limits?
- Any limits that change based on the LiveKit Cloud plan?
For example, could one trunk contain 10, 100, or 1,000 phone numbers?
6. Multiple SIP providers
We currently plan to support both:
- Twilio
- Plivo
What is the recommended LiveKit architecture when an application uses multiple SIP providers simultaneously?
For example:
LiveKit
|
┌─────────┴─────────┐
│ │
Twilio Trunk Plivo Trunk
│ │
Twilio numbers Plivo numbers
Does LiveKit officially support multiple inbound SIP trunks belonging to different SIP providers within the same project?
If yes, is there any official documentation or recommended configuration for this architecture?
7. allowed_addresses / SIP provider IP addresses
We have seen the allowed_addresses functionality in the LiveKit SIP API documentation.
Could you clarify whether allowed_addresses is required when using multiple SIP providers such as Twilio and Plivo, or whether it is simply an optional security/authentication mechanism?
Specifically:
- Is it mandatory to configure Twilio and Plivo SIP signaling IP addresses?
- If we have multiple trunks, how does LiveKit determine which inbound trunk a SIP call belongs to?
- Is the trunk identified by the phone number, SIP credentials, source IP, or some combination of these?
- Does using multiple SIP providers change this behavior?
We would like to make sure we are following the officially recommended architecture rather than implementing an unnecessary IP-filtering mechanism.
8. India region for Plivo
Our Plivo traffic will primarily be for Indian customers.
If our LiveKit project is deployed/operating in another region, is it possible to configure only the Plivo SIP traffic to use an India SIP endpoint/region, while keeping the rest of our LiveKit project configuration unchanged?
For example:
Twilio
↓
Twilio SIP region
↓
LiveKit
Plivo
↓
India SIP region
↓
LiveKit
Can different SIP providers/trunks use different LiveKit SIP regions within the same project?
If so, what is the recommended configuration?
9. One organization using both Twilio and Plivo
A particularly important use case for us is that one organization may use both Twilio and Plivo simultaneously.
For example:
Organization A
Twilio
├── +1 XXX XXX XXXX
└── +1 XXX XXX XXXX
Plivo
├── +91 XXXXX XXXXX
└── +91 XXXXX XXXXX
We would potentially have:
Organization A
│
├── Twilio SIP Trunk
│ └── Twilio numbers
│
└── Plivo SIP Trunk
└── Plivo numbers
How does LiveKit distinguish these trunks when both belong to the same organization?
Is the recommended approach to create:
Organization A
├── LiveKit Twilio Trunk
└── LiveKit Plivo Trunk
and then associate the phone numbers/dispatch rules accordingly?
If so, could you provide an example of the recommended configuration?
Our main goal
Before moving to production, we want to design the SIP architecture correctly for a multi-tenant platform with multiple SIP providers, rather than having to redesign it later.
Our expected scale is approximately 5,000 calls/day, with approximately 5 concurrent calls per organization, potentially across many organizations.
We would particularly appreciate guidance on:
- Recommended LiveKit Cloud plan for this workload
- SIP concurrency limits
- Multi-tenant trunk architecture
- Maximum/recommended numbers per trunk
- Multiple SIP providers in one project
- How LiveKit identifies/differentiates multiple trunks
- Whether
allowed_addressesis actually required for this architecture - Using different SIP regions for different providers, particularly India for Plivo
- Cloud vs self-hosted LiveKit at our expected scale
If there is any official documentation, architecture guide, or reference implementation covering multi-tenant + multiple SIP providers, please share it as well.
Thank you,
Current Plan: Free
Use Case: Multi-tenant AI calling platform