Docs/Reference

Rate limits

The API limit belongs to the team, not the app. re: uses little of it on purpose.

A limit shared with your production

Resend limits the API to 10 requests per second per team (the default; Resend can raise it on request). The limit covers every API key and OAuth grant on the team. In other words, re: and your backend draw from the same bucket.

If one client burns through the limit, the one that gets the 429 may be your production system. re: is built not to be that client.

How re: behaves

  • Its own 4 req/s ceiling. The app spaces requests 250 ms apart, well under the limit.
  • Pauses before the limit. The app reads ratelimit-remaining and ratelimit-reset on every response. When 2 or fewer requests are left, it pauses until the window resets.
  • Honors retry-after. On a 429, it waits the requested time and retries at most 2 times.
  • Caching. Lists are cached for 30 to 60 seconds and aren’t reloaded on every screen change. Metrics already come with up to 15 minutes of caching from Resend itself.
  • No aggressive polling. Alerts arrive by webhook, so the app doesn’t query the API in the background.
ratelimit-limit
ratelimit-remaining
ratelimit-reset
retry-after
x-resend-daily-quota
x-resend-monthly-quota

API usage

In More › API usage you see what the latest responses reported: requests left in the window, when it resets, how many requests re: made in the last minute, and the daily and monthly sending quotas. The daily quota only exists on Resend’s free plan.

With multiple teams (Pro), each team has its own limit and quota.

Who pays for the calls

Calls leave your phone, with your token, straight to Resend. They don’t go through any server of ours, so API volume costs us nothing and re: adds no artificial limit on top of Resend’s.

When the team is rate-limited

If your backend is already using up the limit, re: waits longer. You’ll see:

  • A banner, API limit reached. Retrying in …, with a countdown.
  • If retries run out, the error screen: Resend is limiting your team requests for a few seconds, with Try again.

Your sending isn’t affected by the app. If 429s are frequent in production, ask Resend for a higher limit for the team.

Missing something on this page? Tell us on the feedback board