Retry idempotent requests.

This isn't actually retry_limit, it is "tries" limit as written.  I think that is unintentional.  A side effect of that is if you set this retry_limit to 0, this function returns nil without any raises.