API Request Throttling
API request throttling is a fairly standard practice throughout the web. Most SaaS companies that provide web APIs do not permit unlimited API use. Some companies throttle requests to protect their backend resources where load and throughput are important metrics of service delivery, while others throttle requests as part of a broader business model where higher throttles are available at cost. Some companies even throttle the fidelity of API requests and only provide some functionality with elevated subscriptions.
At Blackbaud, the SKY API employs two forms of API request throttling: rate-limits and quotas.
We use a rate-limit throttle to protect our backend servers from being overloaded with too many requests during sporadic moments of heavy API traffic in a short period of time (seconds). We use a quota throttle to enforce an appropriate level of sustained API traffic over a broader period of time (daily). Taken together, these throttling measures protect our backend resources from problems caused by heavy traffic, runaway code, infinite loops, inappropriate usage, etc. They allow us to ensure that we can provide a good API experience for all consumers.
The throttling thresholds are based on your SKY API subscription level. Currently, we offer two flavors of the SKY API:
You can view your API subscription level on the developer profile page of the SKY API developer portal. For example, the screenshot shows that I have a subscription to the SKY API Standard Edition tier.

For standard subscriptions, the threshold for the rate-limit throttle is currently 5 calls/second with a quota threshold of 25K calls/day. For Partner subscriptions, the thresholds are similar but are applied on a per-application, per-customer basis. This allows Partner developers to build and sell applications to as many customers as possible without each new customer lowering the threshold for existing customers.
For both standard and Partner editions of the SKY API, we offer paid upgrade tiers that provide even higher quota throttling characteristics (for example, 100K calls/day or 250K calls/day). To upgrade your subscription, you can submit an upgrade request in the developer portal: https://developer.sky.blackbaud.com/usage-increase. And to join the Partner program, you can find more details here:
https://www.blackbaud.com/partners/become-a-partner
When you reach a throttling threshold, you receive a response from the SKY API with details about how long to wait before making additional API calls. In general, you should code your app to be robust in the face of throttling. For example, if you hit the rate-limit threshold and receive a "429 Too Many Requests" response, you might implement a 1-second delay before retrying your API request. Here’s a sample response that you might receive when you encounter a rate-limit throttle:
Retry-After: 1
Date: Mon, 15 May 2017 19:47:44 GMT
Content-Length: 83
Content-Type: application/json
{
"statusCode": 429,
"message": "Rate limit is exceeded. Try again in 1 second."
}
Note the
As an example, we've updated our Barkbaud sample application to handle 429 error responses. We recommend wrapping your calls through a proxy that handles the possibility of getting 429 error responses. As previously mentioned, the response includes a

The code wraps the call to the API with a catch, and if the status code on the error is a 429, it waits the number of seconds provided in the
For more information about rate-limits, quotas, and subscriptions, take a look at the content on the following links:
As always, we welcome your feedback on this, and please let us know if you have any further questions. Thanks!
At Blackbaud, the SKY API employs two forms of API request throttling: rate-limits and quotas.
We use a rate-limit throttle to protect our backend servers from being overloaded with too many requests during sporadic moments of heavy API traffic in a short period of time (seconds). We use a quota throttle to enforce an appropriate level of sustained API traffic over a broader period of time (daily). Taken together, these throttling measures protect our backend resources from problems caused by heavy traffic, runaway code, infinite loops, inappropriate usage, etc. They allow us to ensure that we can provide a good API experience for all consumers.
The throttling thresholds are based on your SKY API subscription level. Currently, we offer two flavors of the SKY API:
- A Standard Edition tier for general developers and customers
- A Partner Edition tier for Partner-level developers who build complementary products that integrate with Blackbaud offerings
You can view your API subscription level on the developer profile page of the SKY API developer portal. For example, the screenshot shows that I have a subscription to the SKY API Standard Edition tier.

For standard subscriptions, the threshold for the rate-limit throttle is currently 5 calls/second with a quota threshold of 25K calls/day. For Partner subscriptions, the thresholds are similar but are applied on a per-application, per-customer basis. This allows Partner developers to build and sell applications to as many customers as possible without each new customer lowering the threshold for existing customers.
For both standard and Partner editions of the SKY API, we offer paid upgrade tiers that provide even higher quota throttling characteristics (for example, 100K calls/day or 250K calls/day). To upgrade your subscription, you can submit an upgrade request in the developer portal: https://developer.sky.blackbaud.com/usage-increase. And to join the Partner program, you can find more details here:
https://www.blackbaud.com/partners/become-a-partner
When you reach a throttling threshold, you receive a response from the SKY API with details about how long to wait before making additional API calls. In general, you should code your app to be robust in the face of throttling. For example, if you hit the rate-limit threshold and receive a "429 Too Many Requests" response, you might implement a 1-second delay before retrying your API request. Here’s a sample response that you might receive when you encounter a rate-limit throttle:
Retry-After: 1
Date: Mon, 15 May 2017 19:47:44 GMT
Content-Length: 83
Content-Type: application/json
{
"statusCode": 429,
"message": "Rate limit is exceeded. Try again in 1 second."
}
Note the
Retry-After header in the response above. This value indicates how many seconds your app should wait before making additional API requests.As an example, we've updated our Barkbaud sample application to handle 429 error responses. We recommend wrapping your calls through a proxy that handles the possibility of getting 429 error responses. As previously mentioned, the response includes a
Retry-After header when you get a 429. The value of this header is given in seconds, and we can use it to retry a request that hit a rate-limit error. Here is the code in our sample app that handles 429 responses:
The code wraps the call to the API with a catch, and if the status code on the error is a 429, it waits the number of seconds provided in the
Retry-After header and then attempts to make another request. This allows for a seamless experience and makes it much easier to write your application knowing that 429s are all automatically handled by this proxy.For more information about rate-limits, quotas, and subscriptions, take a look at the content on the following links:
- https://apidocs.sky.blackbaud.com/docs/basics#rate-limits
- https://apidocs.sky.blackbaud.com/docs/basics/#quotas
- https://apidocs.sky.blackbaud.com/docs/basics/#subscription
- https://apidocs.sky.blackbaud.com/support/faq/#subscription-keys
As always, we welcome your feedback on this, and please let us know if you have any further questions. Thanks!
0
Categories
- All Categories
- 6 Blackbaud Community Help
- 209 bbcon®
- 1.4K Blackbaud Altru®
- 394 Blackbaud Award Management™ and Blackbaud Stewardship Management™
- 1.1K Blackbaud CRM™ and Blackbaud Internet Solutions™
- 15 donorCentrics®
- 359 Blackbaud eTapestry®
- 2.5K Blackbaud Financial Edge NXT®
- 646 Blackbaud Grantmaking™
- 563 Blackbaud Education Management Solutions for Higher Education
- 3.2K Blackbaud Education Management Solutions for K-12 Schools
- 934 Blackbaud Luminate Online® and Blackbaud TeamRaiser®
- 84 JustGiving® from Blackbaud®
- 6.4K Blackbaud Raiser's Edge NXT®
- 3.7K SKY Developer
- 243 ResearchPoint™
- 118 Blackbaud Tuition Management™
- 165 Organizational Best Practices
- 238 The Tap (Just for Fun)
- 33 Blackbaud Community Challenges
- 28 PowerUp Challenges
- 3 (Open) Raiser's Edge NXT PowerUp Challenge: Product Update Briefing
- 3 (Closed) Raiser's Edge NXT PowerUp Challenge: Standard Reports+
- 3 (Closed) Raiser's Edge NXT PowerUp Challenge: Email Marketing
- 3 (Closed) Raiser's Edge NXT PowerUp Challenge: Gift Management
- 4 (Closed) Raiser's Edge NXT PowerUp Challenge: Event Management
- 3 (Closed) Raiser's Edge NXT PowerUp Challenge: Home Page
- 4 (Closed) Raiser's Edge NXT PowerUp Challenge: Standard Reports
- 4 (Closed) Raiser's Edge NXT PowerUp Challenge: Query
- 779 Community News
- 2.9K Jobs Board
- 53 Blackbaud SKY® Reporting Announcements
- 47 Blackbaud CRM Higher Ed Product Advisory Group (HE PAG)
- 19 Blackbaud CRM Product Advisory Group (BBCRM PAG)
