الحدود العامة
يحدّ Brevo طلبات API لكل نقطة نهاية. كل حد هو عدد من الطلبات في الثانية (RPS) أو في الساعة (RPH) أو كليهما. الأرقام أدناه مأخوذة من صفحة حدود المعدل لدى Brevo، وتم التحقق منها في 7 أكتوبر 2026. راجع تلك الصفحة قبل أن تحدد حجم مهمة كبيرة.
مستويات حد المعدل
| المستوى | متاح في |
|---|---|
| العام | 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 طلب في الدقيقة فقط عندما تكون الطلبات موزعة بالتساوي.
- جمّع الطلبات واستخدم التخزين المؤقت: استخدم نقاط النهاية المجمّعة وتجنب إعادة قراءة بيانات لديك بالفعل.
- استخدم webhooks للإحصاءات: استقبل الأحداث بدلًا من الاستعلام المتكرر عن نقاط نهاية الإحصاءات.
- فكّر في مستوى أعلى: يأتي المستويان المتقدم والموسّع مع خطط Professional وEnterprise.