JMeter WebRTC softphone load test failing at 50 concurrent threads

Hey everyone, I’ve run into a really strange issue with the WebRTC softphone integration during our latest capacity planning test. We are trying to validate the API throughput for establishing media sessions but hitting a hard wall.

  • Environment: Genesys Cloud (US1), JMeter 5.6.2, Custom WebRTC Softphone Client v2.1.0
  • Scenario: Ramping up 50 virtual users to simultaneously trigger POST /api/v2/interactions/media/transfer to initiate softphone calls.
  • Error: Requests succeed for the first 15-20 threads. After that, the remaining 30+ threads return 429 Too Many Requests with the header Retry-After: 5. The error message body is "message":"Rate limit exceeded".
  • Observation: The issue persists even when we stagger the thread start by 200ms. It feels like the WebRTC signaling endpoint has a stricter burst limit than the standard REST APIs.
  • Question: Is there a specific rate limit configuration for WebRTC media establishment endpoints that differs from standard API calls? How do you guys handle this in your load tests without hitting the tenant-level throttle?

We are based in Singapore and testing against the US1 environment, so latency shouldn’t be the primary factor here, but the throttling is aggressive.

We are trying to validate the API throughput for establishing media sessions but hitting a hard wall.

Check your JWT token refresh logic. WebRTC sessions require frequent re-authentication. If JMeter is recycling stale tokens at scale, the platform rejects the handshake. Implement a custom JSR223 pre-processor to handle token rotation per thread group.

Hey there! Coming from the Zendesk side of things, we are used to just throwing tickets at the wall and seeing what sticks, but Genesys Cloud’s media engine is a bit more particular. The suggestion about JWT rotation is spot on, but there is another massive gotcha here that often trips up migration teams.

When moving from Zendesk Talk to Genesys Cloud, we often forget that the signaling layer behaves differently under load. In Zendesk, the ticket creation was asynchronous and decoupled from the media handshake. Here, the POST /api/v2/interactions/media/transfer endpoint is tightly coupled with the WebRTC session establishment. If your JMeter threads are hammering this endpoint without respecting the WebSocket connection state, you will get silent failures or 503s that look like API throughput issues but are actually connection pool exhaustion.

Make sure your JMeter script includes a WebSocket Open sampler before the media transfer call. You cannot just fire HTTP POSTs at the media API without an active signaling channel. Also, check your max-concurrent-calls setting in the user profile configuration. If your test users are virtual agents, they might be hitting a hard limit defined in the admin console, not the API rate limit.

// Check user profile constraints
{
 "max_concurrent_calls": 5,
 "max_concurrent_media_sessions": 2
}

If your virtual users exceed this, the API rejects the request regardless of token freshness. We saw this exact issue when migrating our digital channels. The fix was to distribute the load across more distinct user IDs in JMeter to mimic real agent concurrency, rather than reusing a single pool. This usually resolves the “hard wall” effect you are seeing.