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

# Limits

> Record counts, storage limits, rate limits, pagination limits, and bulk operation limits by tier.

## Records & Storage

| Limit                  | Solo    | Professional | Business  | Enterprise |
| ---------------------- | ------- | ------------ | --------- | ---------- |
| Max records per app    | 100,000 | 500,000      | 5,000,000 | 5,000,000  |
| Max record size        | 5 MB    | 10 MB        | 25 MB     | 25 MB      |
| Max attachment storage | 250 MB  | 2 GB         | 25 GB     | 25 GB      |
| Max single attachment  | 10 MB   | 25 MB        | 50 MB     | 50 MB      |
| Max webhook endpoints  | 3       | 10           | 25        | 25         |
| Webhook log retention  | 7 days  | 30 days      | 90 days   | 90 days    |

## API Rate Limits

| Tier         | Requests per minute |
| ------------ | ------------------- |
| Solo         | 60                  |
| Professional | 60                  |
| Business     | 300                 |
| Enterprise   | 300                 |

The limit above applies per caller. An organization-wide ceiling of 10× that value applies in addition, so load spread across many callers still bounds out at the org level.

The `429 Rate Limited` response includes a `Retry-After` header. The SDK retries automatically on 429; if all retries are exhausted it throws `ErrorCode.RateLimited`.

## Pagination

| Limit             | Value |
| ----------------- | ----- |
| Default page size | 25    |
| Max page size     | 100   |

## Bulk Operations

| Operation         | Max per request |
| ----------------- | --------------- |
| bulkCreateRecords | 100 records     |
| bulkUpdateRecords | 100 records     |
| bulkDeleteRecords | 100 IDs         |

## Limits in Code

The current limits for the authenticated user's plan are returned by `sdk.getBootstrap()`:

```javascript theme={null}
const bootstrap = await sdk.getBootstrap();
const { maxPageSize, maxRecordCount, rateLimitPerMinute } = bootstrap.limits;
```
