Console returns {"code":"bad-request","message":"Failed to parse training phrase array"}. Training phrases are plain strings. Local JSON validation passes, payload structure is static. Running SDK 2.4.1 on US1, bot in draft mode.
Rate limit headers show x-ratelimit-remaining dropping to zero right before the 400s start. The Retry-After header never shows up on the 429s, so backoff logic is completely blind. Per a few community posts on bulk ops, this rate limit behavior is expected, but the parser rejection here is a separate bottleneck.
Here’s the request loop:
for batch in chunked_intents:
resp = client.ai_bots_api.put_bot_intent(bot_id, intent_id, body=batch)
if resp.status_code in [429, 400]:
time.sleep(2)
continue
The Python script handles the initial batch fine. Pushing ~100 intent updates to /api/v2/ai/bots/{botId}/intents completes without a hitch. Once the loop hits request 121, the response flips to a 400. The 2-second retry wrapper isn’t cutting it.
Dropped the chunk size to 50 and the errors vanished. It turns a 3-minute sync into a 20-minute grind. Audit logs show the gateway definitely receiving the full payload. The 400s don’t follow a predictable pattern. The parser won’t accept the larger batches. The endpoint keeps rejecting identical payloads after the first hundred or so.
{
"code": "bad-request",
"message": "Failed to parse training phrase array",
"status": 400,
"details": null
}