# Inngest usage limits

Inngest usage limits keep function runs, steps, events, and history predictable for every account. Use these tables to check plan limits, rate-limit related controls, event payload limits, retention windows, and hard platform limits.

If you're looking for function-level rate limiting, use the [rate limiting guide](/docs-markdown/guides/rate-limiting?ref=docs-usage-limits) or [throttling guide](/docs-markdown/guides/throttling?ref=docs-usage-limits).

Some of these limits are customizable, so if you need more than what the current limits provide, please [contact us][contact] and we can update the limits for you.

## Plan limits

| Limit                       | Free     | Basic   | Pro      | Enterprise |
| --------------------------- | -------- | ------- | -------- | ---------- |
| Max concurrent steps        | 5        | 25      | 200+     | Custom     |
| Single event size           | 256KiB   | 512KiB  | 3MiB     | Custom     |
| Trace and log history       | 24 hours | 7 days  | 14 days  | 90 days    |
| Event lookback period       | 1 hour   | 1 hour  | 3 days   | Custom     |
| Maximum function run length | 30 days  | 90 days | 366 days | Custom     |

See the [pricing page](/pricing?ref=docs-usage-limits) for plan packaging, included usage, and paid upgrade details.

## Platform limits

| Limit                      | Current value  | Notes                                                                        |
| -------------------------- | -------------- | ---------------------------------------------------------------------------- |
| Step sleep duration        | Up to 1 year   | Free plan supports sleeps up to 7 days.                                      |
| Step timeout               | Up to 2 hours  | Also depends on your hosting provider's timeout.                             |
| Step-returned payload size | 4MiB           | Applies to data returned by a step.                                          |
| Function run state size    | 32MiB          | Includes event data, step data, function return data, and internal metadata. |
| Steps per function         | 1000           | Loops that create one step per item can hit this quickly.                    |
| Event name length          | 256 characters | Applies to the event `name`.                                                 |
| Events per request         | 5000           | Applies to `step.sendEvent(events)` and `inngest.send(events)`.              |
| Batch size                 | 10MiB          | Hard cap regardless of `timeout` or `maxSize`.                               |

## Functions

The following applies to `step` usage.

### Sleep duration

Sleep (with `step.sleep()` and `step.sleepUntil()`) up to a year, and for free plan up to seven days. Check the [pricing page](/pricing?ref=docs-usage-limits) for more information.

### Timeout

Each step has a timeout depending on the hosting provider of your choice ([see more info][provider-docs]), but Inngest supports up to `2 hours` at the maximum.

### Concurrency Upgradable

Check your concurrency limits on the [billing page](https://app.inngest.com/billing). See the [pricing page](/pricing?ref=docs-usage-limits) for more info about the concurrency limits in all plans.

### Payload Size

The limit for data returned by a step is `4MB`.

### Function run state size

Function run state cannot exceed `32MB`. Its state includes:

- Event data (multiple events if using batching)
- Step-returned data
- Function-returned data
- Internal metadata (*small - around a few bytes*)

### Number of Steps per Function

The maximum number of steps allowed per function is `1000`.

> **Callout:** ⚠️
> This limit is easily reached if you're using step on each item in a loop.
> Instead we recommend one or both of the following:Process the loop within a step and return that dataUtilize the fan out feature to process each item in a separate function

## Events

### Name length

The maximum length allowed for an event name is `256` characters.

### Request Body Size Upgradable

The maximum event payload size is dependent on your billing plan. The Free plan supports `256KiB`, Basic supports `512KiB`, Pro supports `3MiB`, and Enterprise plans can use custom limits. See [the pricing page](/pricing?ref=docs-usage-limits) for additional detail.

### Number of events per request Customizable

Maximum number of events you can send in one request is `5000`.
If you're doing fan out, you'll need to be aware of this limitation when you run `step.sendEvent(events)`.

```ts {{ title: "TypeScript" }}
// this `events` list will need to be <= 5000
const events = [{name: "<event-name>", data: {}}, ...];

await step.sendEvent("send-example-events", events);
// or
await inngest.send(events);
```

```go {{ title: "Go" }}
// this `events` list will need to be <= 5000
events := []inngestgo.Event{{Name: "<event-name>", Data: {}}}

ids, err := client.SendMany(ctx, events)
```

```python {{ title: "Python" }}
# this `events` list will need to be <= 5000
events = [{'name': '<event-name>', 'data': {}}, ...]

await step.send_event('send-example-events', events)
# or
await inngest.send(events)
```

### Batch size

The hard limit of a batch size is 10 MiB regardless of the `timeout` or `maxSize` limit.
Meaning the batch will be started if that limit is crossed even if the batch is not full or has not reached the timeout duration configured.

[provider-docs]: /docs-markdown/usage-limits/providers

[fanout-guide]: /docs-markdown/guides/fan-out-jobs

[contact]: /contact