Skip to content

Commit afead54

Browse files
committed
improvement(rate-limits): increase across all plans
1 parent cf2f1ab commit afead54

File tree

7 files changed

+76
-76
lines changed

7 files changed

+76
-76
lines changed

apps/docs/content/docs/en/execution/api.mdx

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,16 @@ All API responses include information about your workflow execution limits and u
2727
"limits": {
2828
"workflowExecutionRateLimit": {
2929
"sync": {
30-
"requestsPerMinute": 60, // Sustained rate limit per minute
31-
"maxBurst": 120, // Maximum burst capacity
32-
"remaining": 118, // Current tokens available (up to maxBurst)
33-
"resetAt": "..." // When tokens next refill
30+
"requestsPerMinute": 150, // Sustained rate limit per minute
31+
"maxBurst": 300, // Maximum burst capacity
32+
"remaining": 298, // Current tokens available (up to maxBurst)
33+
"resetAt": "..." // When tokens next refill
3434
},
3535
"async": {
36-
"requestsPerMinute": 200, // Sustained rate limit per minute
37-
"maxBurst": 400, // Maximum burst capacity
38-
"remaining": 398, // Current tokens available
39-
"resetAt": "..." // When tokens next refill
36+
"requestsPerMinute": 1000, // Sustained rate limit per minute
37+
"maxBurst": 2000, // Maximum burst capacity
38+
"remaining": 1998, // Current tokens available
39+
"resetAt": "..." // When tokens next refill
4040
}
4141
},
4242
"usage": {
@@ -107,28 +107,28 @@ Query workflow execution logs with extensive filtering options.
107107
}
108108
],
109109
"nextCursor": "eyJzIjoiMjAyNS0wMS0wMVQxMjozNDo1Ni43ODlaIiwiaWQiOiJsb2dfYWJjMTIzIn0",
110-
"limits": {
111-
"workflowExecutionRateLimit": {
112-
"sync": {
113-
"requestsPerMinute": 60,
114-
"maxBurst": 120,
115-
"remaining": 118,
116-
"resetAt": "2025-01-01T12:35:56.789Z"
110+
"limits": {
111+
"workflowExecutionRateLimit": {
112+
"sync": {
113+
"requestsPerMinute": 150,
114+
"maxBurst": 300,
115+
"remaining": 298,
116+
"resetAt": "2025-01-01T12:35:56.789Z"
117+
},
118+
"async": {
119+
"requestsPerMinute": 1000,
120+
"maxBurst": 2000,
121+
"remaining": 1998,
122+
"resetAt": "2025-01-01T12:35:56.789Z"
123+
}
117124
},
118-
"async": {
119-
"requestsPerMinute": 200,
120-
"maxBurst": 400,
121-
"remaining": 398,
122-
"resetAt": "2025-01-01T12:35:56.789Z"
125+
"usage": {
126+
"currentPeriodCost": 1.234,
127+
"limit": 10,
128+
"plan": "pro",
129+
"isExceeded": false
123130
}
124-
},
125-
"usage": {
126-
"currentPeriodCost": 1.234,
127-
"limit": 10,
128-
"plan": "pro",
129-
"isExceeded": false
130131
}
131-
}
132132
}
133133
```
134134
</Tab>
@@ -188,15 +188,15 @@ Retrieve detailed information about a specific log entry.
188188
"limits": {
189189
"workflowExecutionRateLimit": {
190190
"sync": {
191-
"requestsPerMinute": 60,
192-
"maxBurst": 120,
193-
"remaining": 118,
191+
"requestsPerMinute": 150,
192+
"maxBurst": 300,
193+
"remaining": 298,
194194
"resetAt": "2025-01-01T12:35:56.789Z"
195195
},
196196
"async": {
197-
"requestsPerMinute": 200,
198-
"maxBurst": 400,
199-
"remaining": 398,
197+
"requestsPerMinute": 1000,
198+
"maxBurst": 2000,
199+
"remaining": 1998,
200200
"resetAt": "2025-01-01T12:35:56.789Z"
201201
}
202202
},
@@ -477,10 +477,10 @@ The API uses a **token bucket algorithm** for rate limiting, providing fair usag
477477

478478
| Plan | Requests/Minute | Burst Capacity |
479479
|------|-----------------|----------------|
480-
| Free | 10 | 20 |
481-
| Pro | 30 | 60 |
482-
| Team | 60 | 120 |
483-
| Enterprise | 120 | 240 |
480+
| Free | 30 | 60 |
481+
| Pro | 100 | 200 |
482+
| Team | 200 | 400 |
483+
| Enterprise | 500 | 1000 |
484484

485485
**How it works:**
486486
- Tokens refill at `requestsPerMinute` rate

apps/docs/content/docs/en/execution/costs.mdx

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -170,16 +170,16 @@ curl -X GET -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" htt
170170
"rateLimit": {
171171
"sync": {
172172
"isLimited": false,
173-
"requestsPerMinute": 25,
174-
"maxBurst": 50,
175-
"remaining": 50,
173+
"requestsPerMinute": 150,
174+
"maxBurst": 300,
175+
"remaining": 300,
176176
"resetAt": "2025-09-08T22:51:55.999Z"
177177
},
178178
"async": {
179179
"isLimited": false,
180-
"requestsPerMinute": 200,
181-
"maxBurst": 400,
182-
"remaining": 400,
180+
"requestsPerMinute": 1000,
181+
"maxBurst": 2000,
182+
"remaining": 2000,
183183
"resetAt": "2025-09-08T22:51:56.155Z"
184184
},
185185
"authType": "api"
@@ -206,11 +206,11 @@ curl -X GET -H "X-API-Key: YOUR_API_KEY" -H "Content-Type: application/json" htt
206206

207207
Different subscription plans have different usage limits:
208208

209-
| Plan | Monthly Usage Limit | Rate Limits (per minute) |
210-
|------|-------------------|-------------------------|
211-
| **Free** | $20 | 5 sync, 10 async |
212-
| **Pro** | $100 | 10 sync, 50 async |
213-
| **Team** | $500 (pooled) | 50 sync, 100 async |
209+
| Plan | Monthly Usage Included | Rate Limits (per minute) |
210+
|------|------------------------|-------------------------|
211+
| **Free** | $20 | 50 sync, 200 async |
212+
| **Pro** | $20 (adjustable) | 150 sync, 1,000 async |
213+
| **Team** | $40/seat (pooled, adjustable) | 300 sync, 2,500 async |
214214
| **Enterprise** | Custom | Custom |
215215

216216
## Billing Model

apps/sim/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/plan-configs.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,17 @@ import { SlackMonoIcon } from '@/components/icons'
1313
import type { PlanFeature } from '@/app/workspace/[workspaceId]/w/components/sidebar/components/settings-modal/components/subscription/components/plan-card'
1414

1515
export const PRO_PLAN_FEATURES: PlanFeature[] = [
16-
{ icon: Zap, text: '25 runs per minute (sync)' },
17-
{ icon: Clock, text: '200 runs per minute (async)' },
16+
{ icon: Zap, text: '150 runs per minute (sync)' },
17+
{ icon: Clock, text: '1,000 runs per minute (async)' },
1818
{ icon: HardDrive, text: '50GB file storage' },
1919
{ icon: Building2, text: 'Unlimited workspaces' },
2020
{ icon: Users, text: 'Unlimited invites' },
2121
{ icon: Database, text: 'Unlimited log retention' },
2222
]
2323

2424
export const TEAM_PLAN_FEATURES: PlanFeature[] = [
25-
{ icon: Zap, text: '75 runs per minute (sync)' },
26-
{ icon: Clock, text: '500 runs per minute (async)' },
25+
{ icon: Zap, text: '300 runs per minute (sync)' },
26+
{ icon: Clock, text: '2,500 runs per minute (async)' },
2727
{ icon: HardDrive, text: '500GB file storage (pooled)' },
2828
{ icon: Building2, text: 'Unlimited workspaces' },
2929
{ icon: Users, text: 'Unlimited invites' },

apps/sim/components/emails/billing/free-tier-upgrade-email.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ interface FreeTierUpgradeEmailProps {
1313

1414
const proFeatures = [
1515
{ label: '$20/month', desc: 'in credits included' },
16-
{ label: '25 runs/min', desc: 'sync executions' },
17-
{ label: '200 runs/min', desc: 'async executions' },
16+
{ label: '150 runs/min', desc: 'sync executions' },
17+
{ label: '1,000 runs/min', desc: 'async executions' },
1818
{ label: '50GB storage', desc: 'for files & assets' },
1919
{ label: 'Unlimited', desc: 'workspaces & invites' },
2020
]

apps/sim/lib/core/config/env.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -161,14 +161,14 @@ export const env = createEnv({
161161
// Rate Limiting Configuration
162162
RATE_LIMIT_WINDOW_MS: z.string().optional().default('60000'), // Rate limit window duration in milliseconds (default: 1 minute)
163163
MANUAL_EXECUTION_LIMIT: z.string().optional().default('999999'),// Manual execution bypass value (effectively unlimited)
164-
RATE_LIMIT_FREE_SYNC: z.string().optional().default('10'), // Free tier sync API executions per minute
165-
RATE_LIMIT_FREE_ASYNC: z.string().optional().default('50'), // Free tier async API executions per minute
166-
RATE_LIMIT_PRO_SYNC: z.string().optional().default('25'), // Pro tier sync API executions per minute
167-
RATE_LIMIT_PRO_ASYNC: z.string().optional().default('200'), // Pro tier async API executions per minute
168-
RATE_LIMIT_TEAM_SYNC: z.string().optional().default('75'), // Team tier sync API executions per minute
169-
RATE_LIMIT_TEAM_ASYNC: z.string().optional().default('500'), // Team tier async API executions per minute
170-
RATE_LIMIT_ENTERPRISE_SYNC: z.string().optional().default('150'), // Enterprise tier sync API executions per minute
171-
RATE_LIMIT_ENTERPRISE_ASYNC: z.string().optional().default('1000'), // Enterprise tier async API executions per minute
164+
RATE_LIMIT_FREE_SYNC: z.string().optional().default('50'), // Free tier sync API executions per minute
165+
RATE_LIMIT_FREE_ASYNC: z.string().optional().default('200'), // Free tier async API executions per minute
166+
RATE_LIMIT_PRO_SYNC: z.string().optional().default('150'), // Pro tier sync API executions per minute
167+
RATE_LIMIT_PRO_ASYNC: z.string().optional().default('1000'), // Pro tier async API executions per minute
168+
RATE_LIMIT_TEAM_SYNC: z.string().optional().default('300'), // Team tier sync API executions per minute
169+
RATE_LIMIT_TEAM_ASYNC: z.string().optional().default('2500'), // Team tier async API executions per minute
170+
RATE_LIMIT_ENTERPRISE_SYNC: z.string().optional().default('600'), // Enterprise tier sync API executions per minute
171+
RATE_LIMIT_ENTERPRISE_ASYNC: z.string().optional().default('5000'), // Enterprise tier async API executions per minute
172172

173173
// Knowledge Base Processing Configuration - Shared across all processing methods
174174
KB_CONFIG_MAX_DURATION: z.number().optional().default(600), // Max processing duration in seconds (10 minutes)

apps/sim/lib/core/rate-limiter/types.ts

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,24 +28,24 @@ function createBucketConfig(ratePerMinute: number, burstMultiplier = 2): TokenBu
2828

2929
export const RATE_LIMITS: Record<SubscriptionPlan, RateLimitConfig> = {
3030
free: {
31-
sync: createBucketConfig(Number.parseInt(env.RATE_LIMIT_FREE_SYNC) || 10),
32-
async: createBucketConfig(Number.parseInt(env.RATE_LIMIT_FREE_ASYNC) || 50),
33-
apiEndpoint: createBucketConfig(10),
31+
sync: createBucketConfig(Number.parseInt(env.RATE_LIMIT_FREE_SYNC) || 50),
32+
async: createBucketConfig(Number.parseInt(env.RATE_LIMIT_FREE_ASYNC) || 200),
33+
apiEndpoint: createBucketConfig(30),
3434
},
3535
pro: {
36-
sync: createBucketConfig(Number.parseInt(env.RATE_LIMIT_PRO_SYNC) || 25),
37-
async: createBucketConfig(Number.parseInt(env.RATE_LIMIT_PRO_ASYNC) || 200),
38-
apiEndpoint: createBucketConfig(30),
36+
sync: createBucketConfig(Number.parseInt(env.RATE_LIMIT_PRO_SYNC) || 150),
37+
async: createBucketConfig(Number.parseInt(env.RATE_LIMIT_PRO_ASYNC) || 1000),
38+
apiEndpoint: createBucketConfig(100),
3939
},
4040
team: {
41-
sync: createBucketConfig(Number.parseInt(env.RATE_LIMIT_TEAM_SYNC) || 75),
42-
async: createBucketConfig(Number.parseInt(env.RATE_LIMIT_TEAM_ASYNC) || 500),
43-
apiEndpoint: createBucketConfig(60),
41+
sync: createBucketConfig(Number.parseInt(env.RATE_LIMIT_TEAM_SYNC) || 300),
42+
async: createBucketConfig(Number.parseInt(env.RATE_LIMIT_TEAM_ASYNC) || 2500),
43+
apiEndpoint: createBucketConfig(200),
4444
},
4545
enterprise: {
46-
sync: createBucketConfig(Number.parseInt(env.RATE_LIMIT_ENTERPRISE_SYNC) || 150),
47-
async: createBucketConfig(Number.parseInt(env.RATE_LIMIT_ENTERPRISE_ASYNC) || 1000),
48-
apiEndpoint: createBucketConfig(120),
46+
sync: createBucketConfig(Number.parseInt(env.RATE_LIMIT_ENTERPRISE_SYNC) || 600),
47+
async: createBucketConfig(Number.parseInt(env.RATE_LIMIT_ENTERPRISE_ASYNC) || 5000),
48+
apiEndpoint: createBucketConfig(500),
4949
},
5050
}
5151

helm/sim/values.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,8 @@ app:
125125

126126
# Rate Limiting Configuration (per minute)
127127
RATE_LIMIT_WINDOW_MS: "60000" # Rate limit window duration (1 minute)
128-
RATE_LIMIT_FREE_SYNC: "10" # Sync API executions per minute
129-
RATE_LIMIT_FREE_ASYNC: "50" # Async API executions per minute
128+
RATE_LIMIT_FREE_SYNC: "50" # Sync API executions per minute
129+
RATE_LIMIT_FREE_ASYNC: "200" # Async API executions per minute
130130

131131
# UI Branding & Whitelabeling Configuration
132132
NEXT_PUBLIC_BRAND_NAME: "Sim" # Custom brand name

0 commit comments

Comments
 (0)