نقطتا نهاية لرؤية ما استهلكه متجرك وللتنبؤ بحاجة الشهر القادم.
GET /v1/usage
الشهر الميلادي الحالي مجموعًا حسب نوع نقطة النهاية.
المصادقة: مفتاح منصة بصلاحية usage:read.
الاستجابة 200
{
"data": {
"period": "2026-04",
"tier": "enterprise",
"usage": {
"request": { "total": 31, "billable": 0 },
"signup": { "total": 3, "billable": 2 }
},
"limits": {
"requests_per_month": -1,
"signups_per_month": -1,
"webhooks_per_month": -1,
"requests_per_minute": 600
}
}
}
مرجع الحقول
الحقل | المعنى |
| دائمًا |
| خطة حدود المعدل الحالية — دائمًا |
| كل الطلبات في تلك المجموعة، بما فيها المكررة/المرفوضة. |
| الطلبات المحسوبة فعلًا (مثلًا الاشتراكات المكررة لا تُحاسَب). |
| الحدود الفعلية — |
usage متناثر (sparse) — لا تظهر فيه إلا المجموعات التي سُجّل لها نشاط في الشهر التقويمي الحالي (عمليًا request، إضافةً إلى signup / event لحركة المفاتيح العامة). وإن لم يكن للمتجر أي استخدام إطلاقًا، فإن usage يُسلسَل كـ مصفوفة JSON فارغة [] لا ككائن. اجعل المجموعات الغائبة أصفارًا من جانب عميلك واحتمل []؛ وإلا فسيفشل أي محلّل صارم الأنواع.
مجموعات نقاط النهاية
المجموعة | ماذا يُحسب |
| كل نداء اجتاز مصادقة المفتاح وحدود المعدل، ويُحسب قبل معالجة الطلب، فتُحسب أيضًا استجابات 4xx/5xx ورفض الصلاحيات؛ أما النداءات المرفوضة بـ |
| كل نداء |
| كل نداء |
| محجوزة. التسليمات الصادرة غير مُقاسة في v1، لذا لا تظهر هذه المجموعة في الاستجابة أبدًا. |
GET /v1/usage/history
تجميعات ساعية على مدى زمني — مفيد للرسوم البيانية وتحليل الاتجاهات.
المصادقة: مفتاح منصة بصلاحية usage:read.
معاملات الاستعلام
المعامل | النوع | الافتراضي | ملاحظات |
| ISO date | قبل 7 أيام | شامل |
| ISO date | الآن | غير شامل |
السقف الأقصى للمدى: 90 يومًا. وfrom شامل وto غير شامل، ويُقرَّب كلاهما إلى بداية الساعة لأغراض الاستعلام فقط — أما قيمتا from / to المُعادتان في الاستجابة فهما مدخلاتك كما جرى تحليلها، دون تقريب. وتُقبَل صيغ التاريخ والوقت الشائعة (2026-04-01 و2026-04-01T12:00:00Z و-7 days …)؛ أما القيمة غير القابلة للتحليل أو to أقدم من from فتُرجع 400 bad_request ("from/to must be valid date strings, to >= from")، والمدى الذي يتجاوز 90 يومًا يُرجع 400 ("range too large (max 90 days)").
وأوعية period_hour هي ساعات كاملة مختومة بتوقيت Africa/Algiers (UTC+01:00) في لحظة احتساب كل طلب.
الأخطاء
HTTP | الكود | السبب |
400 |
| "from/to must be valid date strings, to >= from" |
400 |
| "range too large (max 90 days)" |
403 |
| "Missing scope: usage:read" |
usage:read ضمن مجموعة الصلاحيات الافتراضية للمفاتيح التي تُنشئها من لوحة التحكم. والمفتاح المُنشأ عبر POST /v1/keys لا يحملها إلا إذا كان المفتاح المنادي يحملها، ورمز التطبيق المثبّت لا يمكنه حملها أبدًا، لذا يتلقى التطبيق 403 على هاتين النقطتين وعلى /v1/quotas.
الطلب
curl 'https://api.dzbuild.app/v1/usage/history?from=2026-04-01&to=2026-05-01' \ -H "Authorization: Bearer $DZ_KEY"
الاستجابة 200
{
"data": {
"from": "2026-04-01T00:00:00+01:00",
"to": "2026-05-01T00:00:00+01:00",
"rows": [
{ "period_hour": "2026-04-30 19:00:00", "endpoint_group": "request", "count": 26, "billable_count": 0 },
{ "period_hour": "2026-04-30 20:00:00", "endpoint_group": "request", "count": 5, "billable_count": 0 },
{ "period_hour": "2026-04-30 20:00:00", "endpoint_group": "signup", "count": 3, "billable_count": 2 }
]
}
}
الصفوف مرتبة تصاعديًا حسب period_hour. الساعات ذات الاستخدام الصفري في أي مجموعة تُحذف (sparse).
نصائح للرسم
التجميع اليومي: اجمع الصفوف حسب أول 10 أحرف من
period_hour(بادئة التاريخ).مساحة مكدّسة: جمّع حسب
endpoint_groupثم الساعة على المحور الأفقي.معدل استنزاف الحصة: اقسم
signup.billable_countالتراكمي على نسبة الشهر المنقضية، وتوقّع نهاية الشهر.
مثال Python بسيط:
import collections, datetime, requests, osr = requests.get('https://api.dzbuild.app/v1/usage/history',
params={'from': '2026-04-01', 'to': '2026-05-01'},
headers={'Authorization': f"Bearer {os.environ['DZ_KEY']}"})
rows = r.json()['data']['rows']by_day = collections.defaultdict(lambda: collections.Counter())
for row in rows:
day = row['period_hour'][:10]
by_day[day][row['endpoint_group']] += row['count']for day, counts in sorted(by_day.items()):
print(day, dict(counts))