Python SDK bulk user creation failing with 429 after 50 rows

I’m running a script to import agents from a CSV file into Genesys Cloud using the Python SDK. The logic seems sound, but it crashes halfway through.

Here is the setup:

  • Python 3.9
  • genesyscloud SDK version 1.35.0
  • Reading from agents.csv with 500 rows

The script works for the first batch of users. Then it hits a wall.

from genesyscloud import PlatformClient, RoutingApi
import csv

client = PlatformClient(client_id='my_client_id', client_secret='my_secret')
api = RoutingApi(client)

with open('agents.csv', 'r') as f:
 reader = csv.DictReader(f)
 for row in reader:
 body = {
 'name': row['Name'],
 'email': row['Email'],
 'username': row['Username'],
 'routing_email': row['Email'],
 'routing_user': {
 'routing_profile_id': 'fixed_profile_id',
 'default_group_id': 'fixed_group_id'
 }
 }
 try:
 api.create_routing_user(body=body)
 print(f'Created {row["Name"]}')
 except Exception as e:
 print(f'Failed: {e}')
 break

The error I get is:

429 Too Many Requests
Retry-After: 2500

This happens after exactly 50 successful creations. I know the rate limit is dynamic. The docs say to check the Retry-After header. But how do I extract that header value from the SDK exception object? The standard e object doesn’t seem to expose the response headers directly.

I tried wrapping it in a sleep loop, but that feels wrong. It’s inefficient. The platform tells you how long to wait. I want to parse that value. Is there a property on the exception or the response that gives me the retry delay? Or do I need to switch to raw HTTP requests just to handle this?

Also, the CSV has some duplicate emails. Should I check for existing users first? That would slow down the script even more.

I need the exact code to read the retry delay from the SDK error. The current script just stops. I don’t want to hardcode a sleep time. It’s risky. Genesys changes the limits.