CXone Admin API bulk update agent skill proficiencies rate limiting and idempotency

How do I correctly to implement a robust bulk update mechanism for agent skill proficiencies in NICE CXone using the Admin API, specifically handling PATCH /api/v2/identity/users/{userId}/skills when processing thousands of agents? I am building a Python service that syncs external HR data with CXone, but I am hitting persistent 429 Too Many Requests errors despite implementing a standard token bucket algorithm. My current approach retrieves the full user object via GET /api/v2/identity/users/{userId}, calculates the delta for the skills array, and sends a PATCH request with the updated proficiency values. The JSON payload includes the skillId, proficiency (integer 1-5), and status fields. However, the CXone API seems to have a stricter rate limit than documented, possibly around 100 requests per minute per tenant, which causes my Redis-backed job queue to backlog significantly. I have tried increasing the delay between requests to 700ms, but this is too slow for our SLA requirements. Is there a batch endpoint or a different API version that allows multiple skill updates in a single call? Additionally, how should I handle partial failures where some skill updates succeed while others fail due to transient network issues? Should I retry the entire user object or just the failed skill entries? I need a method that ensures eventual consistency without overwhelming the CXone API gateway. Any code examples for implementing exponential backoff with jitter in Python requests library would be appreciated. Also, does the CXone API support idempotency keys for PATCH operations to prevent duplicate updates if a retry is triggered? Currently, I am storing the last successful etag in Redis for each user to check for changes before sending the PATCH, but I am unsure if this is sufficient for high-concurrency scenarios. I am looking for best practices from the community on handling large-scale skill synchronization efficiently.