حدود المعدل
افهم كيف تعمل حدود المعدل، والوصول إلى البيانات حسب الخطة، وكيفية التعامل مع استجابات 429.
GET /api/v1/limits للتحقق من مستواك الحالي وحدودك برمجيًا.| المستوى | الطلبات / دقيقة | الدفعة / ثانية |
|---|---|---|
| Builder (بما فيها الفترة التجريبية المجانية لمدة 3 أيام) | 250 | 12 |
| Pro | 750 | 40 |
| Enterprise | مخصص | مخصص |
الحد لكل دقيقة يستخدم نافذة منزلقة. وحد الدفعات يستخدم خوارزمية دلو الرموز (token bucket).
في خطة Builder — بما فيها الفترة التجريبية المجانية لمدة 3 أيام، وهي خطة Builder كاملة — يكون الوصول مقتصرًا على أحدث الأسواق. أما مستويا Pro وEnterprise فلديهما وصول غير محدود إلى جميع الأسواق واللقطات.
| نوع السوق | Builder | Pro / Enterprise |
|---|---|---|
| 5m | 4,100 | غير محدود |
| 15m | 1,400 | غير محدود |
| 1hr | 350 | غير محدود |
| 4hr | 85 | غير محدود |
| 24hr | 14 | غير محدود |
عندما يتجاوز استعلام سرد الحد الأقصى لمستواك، يُقلَّص حد الاستجابة ويُضمَّن حقل warning.
يعتمد عدد مفاتيح API النشطة التي يمكنك امتلاكها على خطتك. المفاتيح المُبطلة أو المنتهية لا تُحتسب ضمن الحد.
تتضمن كل استجابة ترويسات حد المعدل لتتمكن من تتبع استخدامك في الوقت الفعلي.
X-RateLimit-Limit: 250
X-RateLimit-Remaining: 237
X-RateLimit-Reset: 1740800060التعامل مع استجابات 429
عندما تتجاوز حد المعدل، تُرجع API رمز الحالة 429 مع ترويسة Retry-After تشير إلى عدد الثواني التي يجب انتظارها. ويتضمن جسم الاستجابة الحقول error وmessage وretry_after.
import time
import requests
def fetch_with_retry(url, headers, max_retries=3):
for attempt in range(max_retries):
response = requests.get(url, headers=headers)
if response.status_code == 429:
wait = int(response.headers.get("Retry-After", 2 ** attempt))
time.sleep(wait)
continue
return response
raise Exception("Rate limit exceeded after retries")إذا حاولت الوصول إلى سوق أو لقطاته خارج نافذة البيانات لمستواك، تُرجع API الرمز 403 Forbidden. رقِّ خطتك أو استخدم سوقًا أحدث.
{
"error": "Forbidden",
"message": "Your builder plan only includes the most recent markets for this type. Upgrade for full access.",
"tier": "builder"
}