WFM API 429s during JMeter load test in US1

Dealing with a very strange bug here with the WFM scheduling API.

  • Context:
  • Environment: Genesys Cloud US1 region
  • Tool: JMeter 5.6
  • Scenario: Simulating 50 concurrent requests to update agent schedules via /api/v2/wfm/scheduling/schedules
  • Duration: Errors start appearing after 3 minutes of steady load
  • Rate: 10 requests per second per user thread group
  • Issue:
  • Receiving HTTP 429 Too Many Requests errors consistently.
  • The response body contains a Retry-After header but the value is inconsistent, sometimes 1s, sometimes 5s.
  • The request payload includes valid JSON with shift details, skills, and availability blocks.
  • No 400 Bad Request errors, so the payload structure is correct.
  • JMeter Config:
  • Thread Group: 50 threads, ramp-up 10s, loop count 100
  • HTTP Request Defaults: Target URL https://api.mypurecloud.com/api/v2/wfm/scheduling/schedules/{scheduleId}
  • Headers: Content-Type: application/json, Authorization: Bearer <token>
  • Token Management: Using a separate thread group to refresh OAuth tokens every 50 minutes.
  • Observations:
  • The 429s occur even when the total request rate is below the documented limit of 100 requests per minute for WFM APIs.
  • The errors are not distributed evenly across all threads; some threads succeed while others fail immediately.
  • Adding a constant timer of 1000ms between requests reduces the error rate but does not eliminate it.
  • Checking the WFM dashboard shows no unusual spikes in usage or errors from our tenant.
  • Question:
  • Is there a hidden rate limit for schedule updates that is lower than the general API limit?
  • Are there specific headers or parameters needed to handle bulk schedule updates without hitting 429s?
  • How should we adjust the JMeter script to respect the WFM API rate limits more accurately?
  • Any advice on handling the inconsistent Retry-After values in the load test script?
  • Additional Info:
  • We have tried increasing the Retry-After wait time in the script, but the 429s still occur.
  • The same script works fine with lower concurrency (10 threads) without any 429 errors.
  • We are using the latest version of the Genesys Cloud API client libraries.