Rate Limits & Quotas
ogmint uses a multi-layer rate limiting system to ensure fair usage and prevent abuse. Limits differ by tier and authentication method.
Rate Limiting Tiers
| Tier | API | Auth | Burst Limit | Daily Limit |
|---|---|---|---|---|
| Free (Anonymous) | V1 only | None (IP-based) | — | 10 renders/day per IP |
| Free (API Key) | V1 + V2 | x-api-key | 5/second | — |
| Starter | V1 + V2 | x-api-key | 5/second | — |
| Pro | V1 + V2 | x-api-key | 5/second | — |
| Agency | V1 + V2 | x-api-key | 5/second | — |
Monthly Render Quotas
Monthly quotas are enforced per user, regardless of how many API keys you create. Quotas reset monthly.
| Plan | Monthly Renders |
|---|---|
| Free | 100 |
| Starter | 1,000 |
| Pro | 10,000 |
| Agency | 50,000 |
💡 Dedup Saves Quota
V2 render dedup does not count against your monthly quota. If you send the same parameters twice, the second request returns the cached image for free.Rate Limit Headers
When rate limited, the API returns HTTP 429 with a JSON error body:
429 Response
{
"error": "Too many requests. Free tier is limited to 10 renders per day. Use an API key for higher limits."
}Image Proxy Rate Limiting
The image serving proxy at /i/{slug} also has rate limits to prevent hotlink abuse. Images are cached at the edge with a 24-hour Cache-Control header, so CDN cache hits don't count against your limit.
Best Practices
- Use V2 for production: Rendered images are stored on CDN permanently. No re-rendering needed.
- Leverage dedup: Same parameters = same slug. No quota consumed on repeat requests to V2.
- Cache V1 responses: V1 images come with
Cache-Control: public, max-age=86400. Use a CDN or browser cache to avoid redundant requests. - Use short URLs:
/i/{key}is cleaner and enables Vercel edge caching. - Use palettes over custom colors: Fewer mistakes and consistent results.