400 Bad Request on EventBridge throttle PUT request with Go payload

Sending a PUT to /api/v2/analytics/event-streams/event-bridge/subscriptions/{id}/throttle returns a 400 error even though the JSON matches the schema exactly. The docs state “Throttle configurations must include a valid consumerGroupId and a rateLimitMatrix object with integer values for maxBacklog”, but the response payload just says “Invalid throttle payload structure”. I’m constructing the request in Go like this:

{
 "consumerGroupId": "cg-12345",
 "rateLimitMatrix": {
 "maxBacklog": 5000,
 "queueDepth": 200
 },
 "autoPauseThreshold": 0.8
}
  • Go 1.21 client
  • PUT request with Content-Type: application/json
  • Valid bearer token for the org
  • Subscription ID exists and is active

The error log shows a schema violation on queueDepth even though it’s an integer. Format verification is definitely failing on that field.

Checking the Admin UI network traffic during a Throttle Configuration update reveals the actual payload structure because the documentation often omits the required wrapper object for the EventBridge subscription. Your Go struct is likely missing the proper nesting for the RateLimitMatrix or the JSON tags are misaligned with the API expectation. The ConsumerGroupId must be present at the root level of the request body and not passed as a query parameter. You’ll find the API rejects the payload if the MaxBacklog value isn’t explicitly typed as an integer within the matrix object. The Admin UI configuration screen shows the exact hierarchy needed. It’s also possible the endpoint requires a specific Throttle Configuration version header. You should verify the Content-Type is set correctly. The Admin UI shows the payload clearly when you save the settings. The RateLimitMatrix object requires the MaxBacklog field to be strictly defined. You’ll need to ensure the ConsumerGroupId matches the subscription context. The Admin UI validation logic enforces these rules strictly. You can inspect the Network tab to see the exact JSON being sent. Your Go code must marshal this structure correctly. Just check the network tab. Here is the corrected payload structure you need to send to resolve the 400 error.

{
 "consumerGroupId": "your-group-id",
 "rateLimitMatrix": {
 "maxBacklog": 1000
 }
}