Outbound campaign POST failing at 300 concurrent dials

running a load test on POST /api/v2/outbound/campaigns and the throughput drops to zero once concurrent call volumes hit around 300. environment is us-east-1 with org capacity set to 5000. jmeter 5.6.2 setup is pretty standard: 150 threads, 60s ramp, keepalive on, hitting the campaign endpoint with a 100ms pause. the api throughput stays flat at 15 req/sec before it starts throwing 429 errors. response body just says rate limit exceeded for dial capacity bucket. checked the old community thread about websocket connection limits, but this isn’t a websocket issue, it’s strictly the rest api dialing queue. tried bumping the thread count to 200 and adding a 200ms think time, same result. the dialer seems to lock up once the internal capacity calculation hits a threshold, even though the org license allows way more. logs show the requests timing out at the edge router.

Thread Group: 150 threads
Ramp-Up: 60s
Loop: Infinite
Throughput: 15 req/sec -> 0 req/sec
Error: 429 rate limit exceeded for dial capacity bucket

PureCloudPlatformClientV2 indicates the 429 limit triggers because campaign creation shares the bucket with dialer state updates. First, I’ve increased the JMeter pause to 250ms, which only reached 18 req/sec. Second, I routed requests through a REST Proxy action, but the queue backed up immediately. The outbound module doesn’t handle flat bursts. You can switch to the async workflow endpoint to bypass the lock.

curl -X POST "https://api.mypurecloud.com/api/v2/outbound/campaigns/workflows" \
 -H "Authorization: Bearer ${ACCESS_TOKEN}" \
 -d '{"name":"test_campaign","dialMode":"power"}'

The outbound/campaigns route locks the state until a dialer node acknowledges it. You’ll see the spike exactly when the pool hits 300. I need to know if your script polls GET /api/v2/outbound/campaigns/{id} in a tight loop, or if the throttling comes purely from the POST. Check the Retry-After header.