# Differentiation of 429 errors

**URL:** <https://devforum.zoom.us/t/differentiation-of-429-errors/14899>\
**Category:** API and Webhooks\
**Created:** [April 25, 2020, 7:40pm UTC](https://devforum.zoom.us/t/differentiation-of-429-errors/14899 "2020-04-25T19:40:31Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![robert.macaulay](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/robert.macaulay/32/2787_2.png) [@robert.macaulay](https://devforum.zoom.us/u/robert.macaulay)\
**Post date:** [April 25, 2020, 7:40pm UTC](https://devforum.zoom.us/t/differentiation-of-429-errors/14899/1 "2020-04-25T19:40:31Z")

</div>

There are 2 reasons a request can receive a 429 response. One for a per-second rate limit, and one for a per-day total limit.

But, the only way to potentially know which one you hit is to parse the message in the json. Could we possibly get an additional field added to the json error response maybe indicating which was hit?

```
{"code":429,
"limit": "daily", //other value could be "rate" for the per-second one 
 "message":"You have reached the maximum per-second rate limit for this API. Try again later."
}

```

In summary, it would be nice to “subclass” the 429 error if possible with a “which limit” was hit.

Next request- mostly related. There is a ‘X-RateLimit-Remaining’ That only seems to be returned on 200 responses. It doesn’t give us enough info to make proper rate limiting decisions. It would be nice if ALL responses contained something like these 3 examples:

429 response(per second exceeded)

```
"x-Ratelimit-category: heavy"
"X-RateLimit-daily-Remaining: 2000"
"x-ratelimit-daily-limit: 5000"
"x-ratelimit-rate-reset: 20" // Means the 429 you just got exceeded the rate limit and you should wait 20s

```

or

429 response(daily exceeded)

```
"x-Ratelimit-category: heavy"
"X-RateLimit-daily-Remaining: 0"
"x-ratelimit-daily-limit: 5000"
"x-Retry-After: date-time-limit-resets "

```

or

200 response

```
"x-Ratelimit-category: resource-intensive"
"X-RateLimit-daily-Remaining: 500"
"x-ratelimit-daily-limit: 1000"
```

---

<div class="post-metadata">

**Author:** ![tommy](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/tommy/32/72769_2.png) [@tommy](https://devforum.zoom.us/u/tommy)\
**Post date:** [April 28, 2020, 9:15pm UTC](https://devforum.zoom.us/t/differentiation-of-429-errors/14899/2 "2020-04-28T21:15:54Z")

</div>

Hey @robert.macaulay,

Thank you for the suggestions, I will add this as a feature request. (ZOOM-156553)

Thanks,  
Tommy

---

<div class="post-metadata">

**Author:** ![gwhitney](https://avatars.discourse-cdn.com/v4/letter/g/919ad9/32.png) [@gwhitney](https://devforum.zoom.us/u/gwhitney)\
**Post date:** [May 27, 2020, 2:23pm UTC](https://devforum.zoom.us/t/differentiation-of-429-errors/14899/3 "2020-05-27T14:23:32Z")

</div>

I see via the Changelog that the response headers `X-RateLimit-Category` and `X-RateLimit-Type` have been added to 429 responses, but the documentation has not yet been updated accordingly. Could you specify what the possible values for these headers are?

---

<div class="post-metadata">

**Author:** ![tommy](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/tommy/32/72769_2.png) [@tommy](https://devforum.zoom.us/u/tommy)\
**Post date:** [June 1, 2020, 10:59pm UTC](https://devforum.zoom.us/t/differentiation-of-429-errors/14899/4 "2020-06-01T22:59:30Z")

</div>

Hey @gwhitney,

We will get the docs updated. CC @shrijana.g.

> **[Zoom APIs, Webhooks, & WebSockets – Zoom Developer Support](https://devsupport.zoom.us/hc/en-us/sections/9481833134477)**

Thanks,  
Tommy

---

<div class="post-metadata">

**Author:** ![shrijana.g](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/shrijana.g/32/605_2.png) [@shrijana.g](https://devforum.zoom.us/u/shrijana.g)\
**Post date:** [June 5, 2020, 3:23am UTC](https://devforum.zoom.us/t/differentiation-of-429-errors/14899/5 "2020-06-05T03:23:11Z")

</div>

Hi @gwhitney,

Thank you for bringing this up.

The `X-RateLimit-Category` refers to the rate limit label of the API (value could be either Light, Medium, Heavy, Resource-intensive based on the API you’re calling). The X-RateLimit-Type indicates whether the Rate Limit is QPS (Query Per Second) or Daily-limit. We have added the examples in the table here: [https://marketplace.zoom.us/docs/api-reference/rate-limits#best-practices-for-handling-errors](https://marketplace.zoom.us/docs/api-reference/rate-limits#best-practices-for-handling-errors)

Best,  
Shrijana

---

<div class="post-metadata">

**Author:** ![jitenshah](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/jitenshah/32/11540_2.png) [@jitenshah](https://devforum.zoom.us/u/jitenshah)\
**Post date:** [June 29, 2020, 12:27pm UTC](https://devforum.zoom.us/t/differentiation-of-429-errors/14899/6 "2020-06-29T12:27:03Z")

</div>

While exceeding the daily limit I got the following errors

```
data: {
    code: 429,
    message: 'You have exceeded the daily rate limit (100) of Meeting Create/Update API requests permitted for this particular user. You may resume these requests at GMT 00:00:00.'
  }

headers: {
   'x-ratelimit-category': 'Light',
    'x-ratelimit-limit': '6000',
    'x-ratelimit-remaining': '5851'
} 

```

I don’t see _x-ratelimit-type_ set to _Daily-limit_.  
Can you please confirm. Thank you.

---

<div class="post-metadata">

**Author:** ![shrijana.g](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/shrijana.g/32/605_2.png) [@shrijana.g](https://devforum.zoom.us/u/shrijana.g)\
**Post date:** [July 1, 2020, 12:13am UTC](https://devforum.zoom.us/t/differentiation-of-429-errors/14899/7 "2020-07-01T00:13:10Z")

</div>

@jitenshah Thanks for letting us know about this. I will check if this is a bug or not and get back to you.

Best,  
Shrijana

---

<div class="post-metadata">

**Author:** ![shrijana.g](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/shrijana.g/32/605_2.png) [@shrijana.g](https://devforum.zoom.us/u/shrijana.g)\
**Post date:** [July 1, 2020, 1:13am UTC](https://devforum.zoom.us/t/differentiation-of-429-errors/14899/8 "2020-07-01T01:13:14Z")

</div>

@tommy @jitenshah This is a bug and I have assigned a ticket for this to be resolved in a future release. [ZOOM-173698]

---

<div class="post-metadata">

**Author:** ![jitenshah](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/jitenshah/32/11540_2.png) [@jitenshah](https://devforum.zoom.us/u/jitenshah)\
**Post date:** [July 1, 2020, 5:04am UTC](https://devforum.zoom.us/t/differentiation-of-429-errors/14899/9 "2020-07-01T05:04:24Z")

</div>

@shrijana.g : Thank you. is there a way I can track this. How do we know when the API 's are updated ?

---

<div class="post-metadata">

**Author:** ![tommy](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/tommy/32/72769_2.png) [@tommy](https://devforum.zoom.us/u/tommy)\
**Post date:** [July 1, 2020, 10:28pm UTC](https://devforum.zoom.us/t/differentiation-of-429-errors/14899/10 "2020-07-01T22:28:03Z")

</div>

Hey @jitenshah,

I will provide updates here! You can also follow our changelog to see API updates:

[https://marketplace.zoom.us/docs/changelog](https://marketplace.zoom.us/docs/changelog)

Or you can follow #new-releases

Thanks @shrijana.g! 🙂

Thanks,  
Tommy

---

<div class="post-metadata">

**Author:** ![DeveloperBot](https://sea2.discourse-cdn.com/flex016/user_avatar/devforum.zoom.us/developerbot/32/12632_2.png) [@DeveloperBot](https://devforum.zoom.us/u/DeveloperBot)\
**Post date:** [August 21, 2020, 10:32pm UTC](https://devforum.zoom.us/t/differentiation-of-429-errors/14899/11 "2020-08-21T22:32:23Z")

</div>


