Rate Limits
MockHero enforces rate limits to ensure fair usage and platform stability. Limits vary by plan and are measured in records generated, not API calls.
Tier Comparison
All limits reset daily at midnight UTC.
- Limit
- Daily records
- Free
- 1,000
- Pro ($29)
- 100,000
- Scale ($79)
- 1,000,000
- Limit
- Per-request records
- Free
- 100
- Pro ($29)
- 10,000
- Scale ($79)
- 50,000
- Limit
- Requests per minute
- Free
- 10
- Pro ($29)
- 60
- Scale ($79)
- 120
- Limit
- Output formats
- Free
- JSON
- Pro ($29)
- JSON, CSV, SQL
- Scale ($79)
- JSON, CSV, SQL
- Limit
- Seed for reproducibility
- Free
- No
- Pro ($29)
- Yes
- Scale ($79)
- Yes
- Limit
- Schema detection
- Free
- No
- Pro ($29)
- Yes
- Scale ($79)
- Yes
| Limit | Free | Pro ($29/mo) | Scale ($79/mo) |
|---|---|---|---|
| Daily records | 1,000 | 100,000 | 1,000,000 |
| Per-request records | 100 | 10,000 | 50,000 |
| Requests per minute | 10 | 60 | 120 |
| Output formats | JSON | JSON, CSV, SQL | JSON, CSV, SQL |
| Seed for reproducibility | No | Yes | Yes |
| Schema detection | No | Yes | Yes |
Rate Limit Response Headers
Every authenticated response includes headers so you can track your usage without making extra API calls.
- Header
X-RateLimit-Limit- Type
integer- Description
- Maximum records your plan allows per day.
- Header
X-RateLimit-Remaining- Type
integer- Description
- Records remaining in the current daily window.
- Header
X-RateLimit-Reset- Type
string (ISO 8601)- Description
- Timestamp when the daily limit resets (midnight UTC).
- Header
Retry-After- Type
integer- Description
- Seconds to wait before retrying. Only on 429 responses.
| Header | Type | Description |
|---|---|---|
X-RateLimit-Limit | integer | Maximum records your plan allows per day. |
X-RateLimit-Remaining | integer | Records remaining in the current daily window. |
X-RateLimit-Reset | string (ISO 8601) | ISO 8601 timestamp when the daily limit resets (midnight UTC). Example: "2026-03-21T00:00:00.000Z" |
Retry-After | integer | Seconds to wait before retrying. Only present on 429 responses for per-minute rate limits (not daily limits). |
Example Headers
HTTP/1.1 200 OK Content-Type: application/json X-RateLimit-Limit: 100000 X-RateLimit-Remaining: 94320 X-RateLimit-Reset: 2026-03-21T00:00:00.000Z X-Request-Id: req_8a3f2c1d7e9b
When You Hit the Limit
When you exceed your daily record limit or per-minute request limit, the API returns a 429 Too Many Requests response. For per-minute limits, a Retry-After header is included indicating how many seconds to wait.
429 Response Example
HTTP/1.1 429 Too Many Requests
Content-Type: application/json
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 2026-04-01T00:00:00.000Z
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Daily record limit exceeded. Your plan allows 1,000 records per day. Resets at 2026-04-01T00:00:00Z."
}
}Best Practices
- Monitor the
X-RateLimit-Remainingheader to see how many records you have left before hitting the limit. - Use the
seedparameter (Pro+) to cache and replay results instead of re-generating identical datasets. - Generate data in bulk rather than one record at a time to maximize the value of each request within per-minute limits.
- If you consistently hit limits, consider upgrading your plan. The Pro tier offers 100x the daily record allowance of the Free tier.
Per-Minute Rate Limits
In addition to daily record limits, MockHero enforces per-minute request limits to prevent burst abuse. These are measured as total HTTP requests to any authenticated endpoint, not records generated.
- Plan
- Free
- Requests / Min
- 10
- Burst Window
- Fixed 60-second window
- Plan
- Pro
- Requests / Min
- 60
- Burst Window
- Fixed 60-second window
- Plan
- Scale
- Requests / Min
- 120
- Burst Window
- Fixed 60-second window
| Plan | Requests / Minute | Burst Window |
|---|---|---|
| Free | 10 | Fixed 60-second window |
| Pro | 60 | Fixed 60-second window |
| Scale | 120 | Fixed 60-second window |
Per-minute limits use a fixed window algorithm that resets every 60 seconds. If you exhaust your limit, you must wait until the current window resets before sending additional requests.
MockHero