Rate Limiting
FormFav uses a rolling 24-hour window, not a fixed midnight reset. Understanding how it works helps you avoid unexpected 429s.
How It Works
Your limit is measured over a rolling 24-hour window. Each request you make is tracked individually, and it expires exactly 24 hours after it was made — not at midnight.
This means your available capacity is continuously replenishing as old requests age out. You don't always recover the full limit in one go; you recover exactly as many slots as you used 24 hours prior.
Response Headers
Every API response includes these headers so you can monitor your usage in real time:
X-RateLimit-Limit-Day: 1000
X-RateLimit-Remaining-Day: 423
Retry-After: 3601| Header | Description |
|---|---|
X-RateLimit-Limit-Day | Your plan's total request allowance per 24-hour window |
X-RateLimit-Remaining-Day | Slots available right now |
Retry-After | Seconds until your oldest request expires and one slot opens up (only on 429 responses) |
Use Retry-After, don't poll
Retry-After value and wait exactly that many seconds before retrying. Don't guess or use a fixed backoff — this header tells you precisely when the next slot opens.Examples
The burst user
A user exhausts their full allowance in a short burst at 9:00 AM Monday.
| Time | What happens |
|---|---|
| 9:00 AM Mon | Full allowance exhausted. Limit hit. |
| 9:00 AM Mon – 9:00 AM Tue | All requests return 429. Retry-After counts down from ~86,400s. |
| 9:00 AM Tue | All slots open simultaneously — full allowance restored at once. |
| 9:00 AM Tue onwards | Fresh window available. |
Because all requests were made in a short burst, they all expire together — the full allowance comes back in one go, exactly 24 hours after the burst.
The steady user
A user spreads requests evenly throughout the day.
| Time | New requests | Slots expiring | Net remaining |
|---|---|---|---|
| 1:00 PM Mon | ~42 | 0 | ~958 |
| 2:00 PM Mon | ~42 | 0 | ~916 |
| 1:00 PM Tue | ~42 | ~42 (from 1 PM Mon) | stable ~916 |
| 2:00 PM Tue | ~42 | ~42 (from 2 PM Mon) | stable ~916 |
Slots expire at the same rate they're consumed — this user never hits the wall, even running continuously.
Key Takeaways
- •Not a midnight reset. The window rolls continuously from each individual request, not from a fixed clock time.
- •Burst early, recover early. Exhausting the limit at 9 AM means you're unblocked by 9 AM the next day — not at midnight.
- •Slots open as they expire. You recover exactly as many requests as you used in the corresponding window 24 hours ago — not necessarily all at once.
- •Retry-After is precise. It tells you the exact seconds until your oldest request expires and one slot opens — use it.