全局限制
Brevo 按端点限制 API 请求。每项限制是每秒请求数(RPS)、每小时请求数(RPH),或两者兼有。以下数据来自 Brevo 的速率限制页面,核对日期为 2026 年 10 月 7 日。在为大型任务估算规模之前,请先查看该页面。
速率限制档位
| 档位 | 适用方案 |
|---|---|
| 通用 | Free、Starter、Standard、Professional 和 Enterprise |
| 高级 | Professional 和 Enterprise |
| 扩展 | Enterprise |
各档位的限制
| 端点 | 通用 | 高级 | 扩展 |
|---|---|---|---|
POST /v3/smtp/email, GET /v3/smtp/blockedContacts | 1,000 RPS, 3,600,000 RPH | 2,000 RPS, 7,200,000 RPH | 6,000 RPS |
GET /v3/smtp/emails | 2 RPS, 7,200 RPH | 3 RPS, 10,800 RPH | 18,000 RPH |
POST /v3/transactionalSMS/send | 150 RPS, 540,000 RPH | 200 RPS, 720,000 RPH | 250 RPS |
POST /v3/events | 10 RPS, 36,000 RPH | 20 RPS, 72,000 RPH | 60 RPS |
POST /v3/orders/status | 5 RPS, 18,000 RPH | 10 RPS, 36,000 RPH | 15 RPS |
POST /v3/products | 2 RPS, 7,200 RPH | 4 RPS, 14,400 RPH | 21,600 RPH |
/v3/smtp 下的其他端点 | 300 RPH | 600 RPH | 1,800 RPH |
/v3/contacts 下的所有端点 | 10 RPS, 36,000 RPH | 20 RPS, 72,000 RPH | 60 RPS |
/v3/loyalty 下的所有端点 | 600 RPH | 1,200 RPH | 100,000 RPH |
| 所有其他端点 | 100 RPH | 200 RPH | 600 RPH |
当一个端点同时有 RPS 和 RPH 限制时,请同时保持在两者之下。
速率限制响应头
受速率限制的端点会返回以下响应头:
HTTP/1.1 200 OKx-sib-ratelimit-limit: 1000x-sib-ratelimit-remaining: 750x-sib-ratelimit-reset: 1响应头说明
x-sib-ratelimit-limit:当前窗口允许的请求数x-sib-ratelimit-remaining:当前窗口剩余的请求数x-sib-ratelimit-reset:距离窗口重置的时间,通常以秒为单位
Brevo 在其速率限制响应头页面中记录了这些响应头。
监控用量
查看当前用量
const checkRateLimit = async () => { const response = await fetch('https://api.brevo.com/v3/account', { headers: { 'api-key': process.env.BREVO_API_KEY } });
console.log({ limit: response.headers.get('x-sib-ratelimit-limit'), remaining: response.headers.get('x-sib-ratelimit-remaining'), resetInSeconds: Number(response.headers.get('x-sib-ratelimit-reset')) });};应对速率限制
指数退避
const makeRequestWithBackoff = async (url, options, maxRetries = 3) => { for (let i = 0; i < maxRetries; i++) { const response = await fetch(url, options);
if (response.status !== 429) return response;
const resetSeconds = Number(response.headers.get('x-sib-ratelimit-reset') || 1); const delay = Math.max(resetSeconds * 1000, 1000 * Math.pow(2, i));
console.log(`Rate limited. Waiting ${delay}ms before retry ${i + 1}`); await new Promise(resolve => setTimeout(resolve, delay)); } throw new Error('Rate limit retries exhausted');};当你持续触达限制时
- 均匀分散请求:只有在请求均匀分散时,1,000 RPS 的限制才允许每分钟最多 60,000 次请求。
- 批量处理与缓存:使用批量端点,避免重复读取你已有的数据。
- 用 Webhook 获取统计数据:接收事件,而不是轮询统计端点。
- 考虑更高的档位:高级和扩展档位随 Professional 和 Enterprise 套餐提供。