> ## Documentation Index
> Fetch the complete documentation index at: https://www.cashfree.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# API Rate Limits

To maintain service reliability, protect against abuse, and ensure consistent quality of service for all users, the following rate limits apply to the APIs. All Secure ID verification APIs are subject to rate limits measured in **transactions per minute (TPM)**. These limits apply per merchant account and are categorised based on resource requirements and typical usage patterns of each API.

<CardGroup cols={3}>
  <Card title="Standard" icon="server">
    **100 TPM**: Verification APIs that require real-time processing and external data validation
  </Card>

  <Card title="Medium" icon="bolt">
    **200 TPM**: Lightweight verification services with faster processing capabilities
  </Card>

  <Card title="Restricted" icon="clock">
    **5 TPM**: Resource-intensive bulk operations that require significant processing time
  </Card>
</CardGroup>

## Rate limits

<Tabs>
  <Tab title="Standard (100 TPM)">
    **Standard rate limit: 100 transactions per minute**

    Secure ID APIs that require real-time processing and external data validation.

    | API                                                                                                                    | Description                                                           |
    | :--------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------- |
    | [Aadhaar Masking](/api-reference/vrs/v2/aadhaar/aadhaar-masking)                                                       | Masks sensitive Aadhaar information                                   |
    | [Bank Account Verification Async V2](/api-reference/vrs/v2/bav-v2/bank-account-verification-async-v2)                  | Asynchronous bank account validation                                  |
    | [Bank Account Verification Sync V2](/api-reference/vrs/v2/bav-v2/bank-account-verification-sync-v2)                    | Synchronous bank account validation                                   |
    | [Create Auth Token](/api-reference/vrs/v2/video-kyc/oauth-token)                                                       | Creates authentication token for Video KYC                            |
    | [Create E-Sign Request](/api-reference/vrs/v2/e-sign/create-e-sign-request)                                            | Initiates electronic signature process                                |
    | [Create User for Secure ID Suite](/api-reference/vrs/v2/video-kyc/add-user)                                            | Creates user profile for Video KYC                                    |
    | [Data Availability](/api-reference/vrs/v2/data-availability/data-availability)                                         | Checks data availability for verification                             |
    | [Deactivate Static KYC Link](/api-reference/vrs/v2/static-kyc/deactivate-static-kyc-link)                              | Deactivates static KYC verification link                              |
    | [Driving Licence](/api-reference/vrs/v2/driving-license/verify-driving-licence-details)                                | Validates driving licence information                                 |
    | [Employee Details](/api-reference/vrs/v2/advanced-employment/get-employment-details)                                   | Retrieves employment verification data                                |
    | [Face Match](/api-reference/vrs/v2/face-match/face-match)                                                              | Compares facial biometric data                                        |
    | [Fetch Financial Information](/api-reference/vrs/v2/financial-info/fetch-financial-information)                        | Retrieves financial account information                               |
    | [Fetch GSTIN with PAN](/api-reference/vrs/v2/pan-to-gstin/fetch-gstin-with-pan)                                        | Retrieves GST numbers linked to PAN                                   |
    | [GETFetch User Details From Access Token](/api-reference/vrs/v2/oauth/get-user-details-from-access-token)              | Retrieves user details using access token                             |
    | [Generate Static KYC Link](/api-reference/vrs/v2/static-kyc/generate-static-kyc-link)                                  | Generates static KYC verification link                                |
    | [Geocoding](/api-reference/vrs/v2/geocoding/geocoding)                                                                 | Converts address to geographical coordinates                          |
    | [Get BAV Status V2](/api-reference/vrs/v2/bav-v2/get-bav-status-v2)                                                    | Retrieves bank account verification status                            |
    | [Get Consent Status](/api-reference/vrs/v2/consent/get-consent-status)                                                 | Checks consent status for data access                                 |
    | [Get E-Sign Status](/api-reference/vrs/v2/e-sign/get-e-sign-status)                                                    | Checks electronic signature status                                    |
    | [Get Status for Verify PAN in Bulk](/api-reference/vrs/v2/pan/get-status-for-verify-pan-in-bulk)                       | Retrieves bulk PAN verification status                                |
    | [Get Status of Aadhaar Verification via OCR](/api-reference/vrs/v2/aadhaar/get-status-of-aadhaar-verification-via-ocr) | Checks OCR-based Aadhaar verification                                 |
    | [Get Status of PAN Verification via Smart OCR](/api-reference/vrs/v2/smart-ocr/smart-ocr)                              | Checks OCR-based PAN verification                                     |
    | [Get Status of Verify PAN Sync](/api-reference/vrs/v2/pan/get-status-of-verify-pan-sync)                               | Checks synchronous PAN verification status                            |
    | [Get Video KYC Status](/api-reference/vrs/v2/video-kyc/get-vkyc-status)                                                | Gets Video KYC session status                                         |
    | [IFSC Verification V2](/api-reference/vrs/v2/ifsc/ifsc-verification-v2)                                                | Validates IFSC codes and retrieves bank branch details                |
    | [Initiate Video KYC Request](/api-reference/vrs/v2/video-kyc/initiate-vkyc)                                            | Starts Video KYC verification process                                 |
    | [Mobile 360 Send OTP Request](/api-reference/vrs/v2/mobile-360/send-otp-request)                                       | Sends OTP for mobile verification                                     |
    | [Mobile 360 Verify OTP](/api-reference/vrs/v2/mobile-360/verify-otp)                                                   | Verifies OTP for mobile authentication                                |
    | [Name Match](/api-reference/vrs/v2/name-match/name-match)                                                              | Compares name variations and matches                                  |
    | [PAN 360](/api-reference/vrs/v2/pan/pan-360)                                                                           | Comprehensive PAN details and validation                              |
    | [Initiate OAuth](/api-reference/vrs/v2/oauth/initiate-oauth)                                                           | Initiates OAuth authentication process                                |
    | [OAuth Access Token Generation](/api-reference/vrs/v2/oauth/oauth-access-token-generation)                             | Generates OAuth access token                                          |
    | [Passport](/api-reference/vrs/v2/passport/verify-passport)                                                             | Validates passport information                                        |
    | [Request Consent](/api-reference/vrs/v2/consent/request-consent)                                                       | Requests user consent for data access                                 |
    | [Request Financial Information](/api-reference/vrs/v2/financial-info/request-financial-information)                    | Requests access to financial data                                     |
    | [Reverse Geocoding](/api-reference/vrs/v2/reverse-geocoding/reverse-geocoding)                                         | Converts coordinates to address information                           |
    | [Smart OCR](/api-reference/vrs/v2/smart-ocr/smart-ocr)                                                                 | Optical character recognition for documents                           |
    | [Upload Document For E-Sign](/api-reference/vrs/v2/e-sign/upload-document-for-e-sign)                                  | Uploads documents for electronic signing                              |
    | [Vehicle RC](/api-reference/vrs/v2/vehicle-rc/get-vehicle-rc-details)                                                  | Retrieves vehicle registration details                                |
    | [Verify CIN](/api-reference/vrs/v2/cin/verify-cin)                                                                     | Validates Corporate Identity Numbers                                  |
    | [Verify GSTIN](/api-reference/vrs/v2/gstin/verify-gstin)                                                               | Validates GST identification numbers                                  |
    | [Voter ID](/api-reference/vrs/v2/voter-id/verify-voter-id)                                                             | Validates voter identification cards                                  |
    | [Mobile Penny Drop](/api-reference/vrs/v2/mobile-penny-drop/mobile-penny-drop-request)                                 | Validates bank account via one rupee UPI transaction to mobile number |
    | [UPI Penny Drop](/api-reference/vrs/v2/upi-penny-drop/upi-penny-drop-request)                                          | Validates bank account via one rupee UPI transaction to VPA           |
  </Tab>

  <Tab title="Medium (200 TPM)">
    **Medium rate limit: 200 transactions per minute**

    Lightweight verification services with faster processing capabilities.

    | API                                                                                                                       | Description                               |
    | :------------------------------------------------------------------------------------------------------------------------ | :---------------------------------------- |
    | [Create DigiLocker URL](/api-reference/vrs/v2/digilocker/create-digilocker-url)                                           | Creates DigiLocker integration link       |
    | [Create Reverse Penny Drop Request](/api-reference/vrs/v2/reverse-penny-drop/create-reverse-penny-drop-request)           | Initiates reverse penny drop verification |
    | [Generate KYC Link](/api-reference/vrs/v2/1-click-onboarding/generate-kyc-link)                                           | Generates KYC verification link           |
    | [Get DigiLocker Verification Status](/api-reference/vrs/v2/digilocker/get-digilocker-verification-status)                 | Checks DigiLocker document verification   |
    | [Get Document from DigiLocker](/api-reference/vrs/v2/digilocker/get-document-from-digilocker)                             | Retrieves documents from DigiLocker       |
    | [Get KYC Link Status](/api-reference/vrs/v2/1-click-onboarding/get-1-click-onboarding-status)                             | Gets KYC link verification status         |
    | [Get Reverse Penny Drop Request Details](/api-reference/vrs/v2/reverse-penny-drop/get-reverse-penny-drop-request-details) | Retrieves reverse penny drop status       |
    | [IP](/api-reference/vrs/v2/ip/verify-ip)                                                                                  | Validates IP address information          |
    | [Verify PAN Sync](/api-reference/vrs/v2/pan/verify-pan-sync)                                                              | Synchronous PAN verification              |
  </Tab>

  <Tab title="Restricted (5 TPM)">
    **Restricted rate limit: 5 transactions per minute**

    Resource-intensive bulk operations that require significant processing time.

    | API                                                                | Description                                         |
    | :----------------------------------------------------------------- | :-------------------------------------------------- |
    | [Verify PAN in Bulk](/api-reference/vrs/v2/pan/verify-pan-in-bulk) | Processes multiple PAN verifications simultaneously |
  </Tab>
</Tabs>

## Rate limit error handling

When you exceed the rate limit for any API, the system returns an HTTP 429 status code.

<Accordion title="Error Response Structure">
  The following response structure is returned when rate limits are exceeded:

  ```json theme={"dark"}
  {
    "type": "invalid_request_error",
    "code": "rate_limit_exceeded",
    "message": "Too many requests",
    "details": [
      {
        "field": "rate_limit",
        "issue": "Rate limit exceeded for this endpoint"
      }
    ]
  }
  ```
</Accordion>

## Best practices for rate limit management

Use these guidelines to optimise your API usage and avoid rate limit errors.

<Accordion title="Implement exponential backoff">
  When you receive a 429 response, implement retry logic with exponential backoff:

  ```javascript theme={"dark"}
  async function makeAPIRequest(url, options, maxRetries = 3) {
    for (let attempt = 1; attempt <= maxRetries; attempt++) {
      try {
        const response = await fetch(url, options);
        
        if (response.status === 429) {
          const retryAfter = response.headers.get('retry-after');
          const delay = retryAfter ? parseInt(retryAfter) * 1000 : Math.pow(2, attempt) * 1000;
          
          console.log(`Rate limit exceeded. Retrying after ${delay}ms`);
          await new Promise(resolve => setTimeout(resolve, delay));
          continue;
        }
        
        return response;
      } catch (error) {
        if (attempt === maxRetries) throw error;
      }
    }
  }
  ```
</Accordion>

<Accordion title="Monitor rate limit headers">
  Check the rate limit headers in successful responses to proactively manage your request timing:

  ```javascript theme={"dark"}
  const response = await fetch('/api/verify-gstin', options);

  const remaining = response.headers.get('X-RateLimit-Remaining');
  const resetTime = response.headers.get('X-RateLimit-Reset');

  if (parseInt(remaining) < 10) {
    console.log('Approaching rate limit. Consider slowing down requests.');
  }
  ```
</Accordion>

<Accordion title="Distribute requests evenly">
  Avoid sending bursts of requests at the beginning of each minute. Instead, distribute your requests evenly throughout the time window.

  **Example strategy:**

  * For 100 TPM limit: Send 1 request every \~600ms
  * For 200 TPM limit: Send 1 request every \~300ms
  * For 5 TPM limit: Send 1 request every \~12 seconds
</Accordion>

## Requesting rate limit increases

If your application requires higher rate limits, you can submit a request through the [support form](https://merchant.cashfree.com/merchants/landing?env=prod\&raise_issue=1) or contact your account manager directly. When you submit your request, include the following information:

* Your merchant ID
* Current usage patterns and volumes
* Expected future usage requirements
* Business justification for the increase

Your account manager can provide faster processing and personalised assistance for rate limit increase requests.
