Usage Limits

We have put some limits on the service to make sure we provide you a good default to start with, while also keeping it a good experience for all other users using Inngest.

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


The following applies to step usage.


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

Concurrency Customizable

Our free plan has a concurrency limit of 25, and paid plans have concurrency limits of 100 (team), 500 (startup), and up to 20,000 (enterprise).

Payload Size

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

# of Steps per Function

The maximum number of steps allowed per function is 1000.

⚠️ 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 data
  • Utilize the fan out feature to process each item in a separate function


Name length

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

Request Body Size Customizable

The limit for each event request is 512KB, though this can be increased up to 3MB on request.

# 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).

// 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);;