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

# Rate Limits

export const SignupCTA = ({children}) => {
  return <div className="flex flex-wrap items-center gap-4 p-5 rounded-lg border border-gray-200 dark:border-gray-700 my-6" style={{
    background: "linear-gradient(135deg, rgba(0, 97, 213, 0.06), rgba(0, 97, 213, 0.02))"
  }}>
      <div className="flex-1 text-sm leading-relaxed text-gray-700 dark:text-gray-300" style={{
    minWidth: "280px"
  }}>
        {children}
      </div>
      <div className="flex flex-col items-center gap-2">
        <a href="https://account.box.com/signup/developer#ty9l3" className="signup-cta-button inline-flex items-center whitespace-nowrap px-5 py-2 text-sm font-semibold text-white no-underline">
          Get started for free
        </a>
        <a href="https://account.box.com/developers/console" className="signup-cta-login text-xs text-gray-500 dark:text-gray-400 no-underline whitespace-nowrap">
          Already have an account? Log in
        </a>
      </div>
    </div>;
};

export const Link = ({href, children, className, ...props}) => {
  const localizedHref = href;
  return <a href={localizedHref} className={className} {...props}>
      {children}
    </a>;
};

export const MultiRelatedLinks = ({sections = []}) => {
  if (!sections || sections.length === 0) {
    return null;
  }
  return <div className="space-y-8">
      {sections.map((section, index) => <RelatedLinks key={index} title={section.title} items={section.items} />)}
    </div>;
};

export const RelatedLinks = ({title, items = []}) => {
  const getBadgeClass = badge => {
    if (!badge) return "badge-default";
    const badgeType = badge.toLowerCase().replace(/\s+/g, "-");
    return `badge-${badge === "ガイド" ? "guide" : badgeType}`;
  };
  if (!items || items.length === 0) {
    return null;
  }
  return <div className="my-8">
      {}
      <h3 className="text-sm font-bold uppercase tracking-wider mb-4">{title}</h3>

      {}
      <div className="flex flex-col gap-3">
        {items.map((item, index) => <a key={index} href={item.href} className="py-2 px-3 rounded related_link hover:bg-[#f2f2f2] dark:hover:bg-[#111827] flex items-center gap-3 group no-underline hover:no-underline border-b-0">
            {}
            <span className={`px-2 py-1 rounded-full text-xs font-semibold uppercase tracking-wide flex-shrink-0 ${getBadgeClass(item.badge)}`}>
              {item.badge}
            </span>

            {}
            <span className="text-base">{item.label}</span>
          </a>)}
      </div>
    </div>;
};

There are three common types of API call rate limitations that Box may use at
its discretion to best protect network resources and preserve the quality of our
customer experience.

<SignupCTA>
  A free developer account lets you start making API calls and test your integration's rate limit handling with real requests.
</SignupCTA>

## User based

These rate limits protect our service from issues that may arise when a single
user generates too much traffic. The number of API calls that a user can make in
a minute is limited as described below. These limits apply to all Box user
accounts and are the most common. Generally, they are initiated when a
user exceeds approximately 1000 API calls/minute, but certain API endpoints may
have different rate limits.

## Quality of service

These rate limits are designed to protect the quality of service of our
infrastructure. If there is resource contention in the infrastructure, we
introduce automatic rate limits to prevent system degradation and outages.
For instance, if an application happens to be accessing the same physical
database server, such as the use of a file migration tool accessing related
resources that access the same underlying physical resources, Box may impose
temporary rate-limits when load spikes and adjust them as the system recovers.

## Licensing based

All Box Business Plans come with a licensed number of permitted API calls per
enterprise per month. These license based rate limits are designed to prevent
excessive overages and misuse of network resources. If Box's infrastructure
detects that a tool used by or on behalf of a customer has exceeded that
customer's API license allocation or is intending to circumvent network
controls, additional selective rate-limiting may be imposed. You can see the
default API allocations licensed with a particular account level at our
[pricing page][pricing], but note that some customers purchase Platform API
Pricing plans that increase their allocation. 

## Per API rate limits

There are currently a few distinct rate limits in place within the Box API.

* General API calls
  * 1000 API requests per minute, per user
* Uploads
  * 240 file upload requests per minute, per user
* Search
  * 6 searches per second, per user, to the <Link href="/reference/get-search">search endpoint</Link>
  * Two additional limits are applied on top of the basic rate limit
    * 60 searches per minute, per user
    * 12 searches per second, per enterprise
* Box Sign
  * Create and resend sign request: 100 requests per minute, per user
  * Get sign request: 1000 requests per minute, per user

## Rate limit error

When an application hits a rate limit, the API will return an API response with
a HTTP status code of `429 Too Many Requests`.

The response will include the following headers and JSON body.

```yaml theme={null}
retry-after: 100
```

```json theme={null}
{
  "type": "error",
  "status": 429,
  "code": "rate_limit_exceeded",
  "help_url": "https://developer.box.com/guides/api-calls/permissions-and-errors/common-errors/",
  "message": "Request rate limit exceeded, please try again later",
  "request_id": "abcdef123456"
}
```

Please see the <Link href="/reference/resources/client-error">Client Error resource</Link> for more details.

<Note>
  The `retry-after` header provides guidance on the number of seconds to wait
  before the next API call can be retried. In general, we advise using an
  exponential back-off strategy for retrying API calls.
</Note>

[pricing]: https://www.box.com/pricing

<RelatedLinks
  title="RELATED APIS"
  items={[
{ label: translate("Search for content"), href: "/reference/get-search", badge: "GET" }
]}
/>

<RelatedLinks
  title="RELATED GUIDES"
  items={[
{ label: translate("Errors"), href: "/guides/api-calls/permissions-and-errors/common-errors", badge: "GUIDE" }
]}
/>
