Moveworks Product Rate Limits (Chat Integrations, APIs, etc.)
Rate limits are used to control the rate of requests sent or received to underlying chat platforms. Moveworks self-imposes rate limits on its resources to ensure that the Moveworks platform does not send an unreasonable amount of requests to 3rd party platforms.
Note: In many cases, first time requests are typically slower that the published Rate Limits below, since the Moveworks bot needs to create a unique conversation thread with each user. Any subsequent messages or campaigns will be closer to the published RPM below.
Employee Comms
Chat System | Requests per Minute (RPM) - Subsequent Messages |
---|---|
Slack | 525 |
Microsoft Teams | 2500 |
Google Chat | 150 |
Cisco Webex Teams | 600 |
Facebook Workplace | 50 |
Ringcentral Glip | 200 |
Zoom | 1500 |
Moveworks for Web | 1000 |
Moveworks APIs
If you would like to request a rate limit increase, please file a ticket with Moveworks support with business justification.
API | Resource Path | Requests per Minute (RPM) |
---|---|---|
Events API | /rest/v1/messages/send | 120 |
FAQ
Q: What happens if I hit a rate limit against a chat integration?
A: Moveworks native chat integrations have rate limit retries automatically configured for each chat platform. If you run into a rate limit error code, you can try resending the message (if using Employee Comms). If you are using the Moveworks Events API, we recommend updating your workflow to sleep for 60 seconds, and then proceed with retrying the requests if a 429 is hit. e.g:
import time
import requests
def send_request(url):
"""Function to send a request to the specified URL. If a 429 status code is encountered, it retries the request after sleeping for 60 seconds."""
max_retries = 5
retries = 0
while retries < max_retries:
try:
response = requests.get(url)
if response.status_code == 429:
print(f"Too many requests. Retrying in 60 seconds. Attempt: {retries + 1}")
time.sleep(60) # Sleep for 60 seconds before retrying
retries += 1
continue
response.raise_for_status() # Raises an HTTPError if the response status code is 4XX or 5XX
return response.json() # Return the successful response
except requests.exceptions.HTTPError as err:
print(f"HTTP error occurred: {err}")
break # Exit the loop if a non-retryable error occurs
except Exception as err:
print(f"An error occurred: {err}")
break # Exit the loop on other errors
return None # Return None if the request ultimately fails
Updated about 1 month ago