Skip to main content
The First Step
Apr 2, 2026 11:25 AM UTC
Question

C# How to determine if Rate Limit was exceeded immediately after xxxx.Sms().Post(msg) call

Hi, My code is in C#. It is a texting app.  I am assuming that after sending a single SMS message,  I should be able to determine if that single call exceeded the rate limit.  My call to send a SMS message is as follows:

 var resp = await restClient.Restapi().Account().Extension().Sms().Post(requestBody);

Once control returns from the await, how do I obtain the info on whether the rate limit was exceeded?  Is an exception thrown?  Is there a return structure?  Do I have to make another call to read the RateLmit results of above Sms.Post() ?

A C# example to get the Rate Limit info of the above call would be very helpful.

Thank you,

Jim

 

5 replies

PhongVu
Community Manager
Community Manager
Apr 2, 2026 5:52 PM UTC

Add this to your code and try it out

var eventsExtension = new EventsExtension();

await restClient.InstallExtension(eventsExtension);

void EventHandler(object sender, HttpMessages httpMessages)
{
httpMessages.Headers.First(i => i.Key == "X-Rate-Limit-Remaining").Value.First();
Console.WriteLine("Remaining: " + rateLimitRemaining);
}

eventsExtension.RequestSuccess += EventHandler;

Or use the rate limit extension directly

https://github.com/ringcentral/RingCentral.Net/tree/master/RingCentral.Net.RateLimit

For more rate limit headers, check out this article.

The First Step
Apr 6, 2026 4:14 PM UTC

Thank you.  When I try to use either below, the compiler doesn’t recognize the class or the method.  Am I missing a using statement ?

new EventsExtension();
restClient.InstallExtension
PhongVu
Community Manager
Community Manager
Apr 6, 2026 6:29 PM UTC

Sorry for the quick answer without details and with some mistakes.

You need to install the Events extension package RingCentral.Net.Events. Then add the lib to your code

using RingCentral.Net.Events;

// Then this correct code

var eventsExtension = new EventsExtension();
await restClient.InstallExtension(eventsExtension);

void EventHandler(object sender, HttpMessages httpMessages)
{
String rateLimitRemaining = httpMessages.httpResponseMessage.Headers.First(i => i.Key == "X-Rate-Limit-Remaining").Value.First();
Console.WriteLine("Remaining: " + rateLimitRemaining);
}

eventsExtension.RequestSuccess += EventHandler;

 

The First Step
Apr 7, 2026 2:58 PM UTC

Thank you.  I have try/catch blocks around my REST calls.  Before I was aware of this EventHandler Extension,  one of the blocks was catching the 429 error. I was unable to pin point which one, because it is difficult to make a 429 error occur, so I can not test at will.

If this Event Handler is installed, will my other try/catch blocks catch the 429 Error,  or will it only propagate to the newly installed EventHandler Extension?

Also,  what is the c# code to determine which call invoked the EventHandler Extension?  When I look at the structure of the return,  I can sort of get a hint of who called it,  but nothing specific.

Thanks again,

JFA

PhongVu
Community Manager
Community Manager
Apr 8, 2026 2:45 PM UTC

Thank you.  I have try/catch blocks around my REST calls.  Before I was aware of this EventHandler Extension,  one of the blocks was catching the 429 error. I was unable to pin point which one, because it is difficult to make a 429 error occur, so I can not test at will.

If this Event Handler is installed, will my other try/catch blocks catch the 429 Error,  or will it only propagate to the newly installed EventHandler Extension?

Also,  what is the c# code to determine which call invoked the EventHandler Extension?  When I look at the structure of the return,  I can sort of get a hint of who called it,  but nothing specific.

Thanks again,

JFA

Please open and explore the httpMessages.httpRequestMessage object to find more. I think the event is fired even the API call hits the 429 error.

I recommend you to explore all the extensions and particularly the RateLimit extension.


https://github.com/ringcentral/RingCentral.Net/tree/master?tab=readme-ov-file#extensions