Handling API Rate Limiting for Access Tokens

Overview

Some API-based applications enforce rate limits on their authentication or token endpoints. These limits restrict the number of API requests that can be made within a specific time period.

This article explains how to handle access token rate limiting by securely storing and reusing tokens, using a real-world example from Zoho ManageEngine ServiceDesk Plus ITSM.

Problem

Certain applications impose API rate limits on their token generation endpoints. For example, Zoho ManageEngine ServiceDesk Plus ITSM enforces a rate limit of 10 calls per hour on the OAuth token API (/oauth/v2/token).

This means that the token endpoint can be called a maximum of 10 times within a one-hour period.

In our implementation, multiple workflows required access tokens to invoke ServiceDesk Plus APIs. As the number of workflows increased, the combined token requests exceeded the permitted limit, resulting in workflow failures.

After contacting Zoho Support, it was confirmed that the rate limit is a standard security control and cannot be increased.

Diagnosis

The root cause was that each workflow was independently requesting a new access token by calling the /oauth/v2/token endpoint.

Since the token endpoint was limited to 10 requests per hour, frequent token generation requests quickly exhausted the allowed quota.

To address this issue, a mechanism was required to:

  • Generate the access token every hour.
  • Store the token in a central location.
  • Allow multiple workflows to reuse the same token.
  • Prevent excessive calls to the token endpoint.

Solution

To overcome the API rate limit, we implemented a centralized token management approach.

Approach

Create a scheduled workflow that calls the /oauth/v2/token endpoint once every hour.

Store the generated access token in a parameter storage location.

Configure all dependent workflows to retrieve the token from parameter storage instead of generating a new token.

Refresh the stored token every hour through the scheduled workflow.

Flow

Steps

1. Navigate to Admin → Global → Parameter Storage and create a new parameter as shown below.

We selected Entra ID as the parameter type because it allows us to store a single value, which in this case will be the access token. The initial value in the Tenant ID field can be any dummy value. This value will be automatically replaced whenever a new access token is generated and stored.

A parameter acts as a placeholder or storage location for the access token, enabling workflows to retrieve and reuse the token without repeatedly calling the token generation API.

  1. Create a workflow that calls /oauth/v2/token endpoint and store the access token in the parameter that we have created above. To update the parameter, we are using
    https://tenant.api.identitynow.com/v2026/parameter-storage/parameters/{{pamaterId}} endpoint

This workflow has been scheduled to run once every hour.

Attached is the workflow json

ScheduleTokenGenerationWorkflowGlobal20260702.json (4.1 KB)

3. Call the parameter using https://tenant.api.identitynow.com/v2026/parameter-storage/parameters/1fd81d4d-8052-4162-a40f-eba2b64c2088 API to get the updated access token from the other workflows

7 Likes

Interesting use case @JackSparrow! Thanks for sharing.

1 Like

Awesome article! @JackSparrow

We use a very similar approach in one of our more challenging use cases involving target-side rotational refresh token authentication. This pattern has proven to be highly effective in securely managing token lifecycles while minimizing operational overhead. Thanks for sharing such a well-written and practical solution!

1 Like