POST/v1/api-keys
إنشاء مفتاح API
create_api_key
المصادقة
أرسل مفتاح API في الترويسة Authorization: Authorization: Bearer <key>.
معاملات الترويسة
Idempotency-Keystringمفتاح لإعادة محاولة عملية كتابة بأمان: من 1 إلى 255 حرفًا من أحرف ASCII القابلة للطباعة؛ يُنصح بقيمة UUID v4 لكل عملية منطقية. إعادة المحاولة بالمفتاح نفسه خلال 24 ساعة لا تنفّذ العملية مرة أخرى، بل تعيد الاستجابة المحفوظة (الحالة والترويسات والنص) مع الترويسة
Idempotency-Replayed: true. المفتاح نفسه مع أسلوب أو مسار أوContent-Typeأو نص مختلف يعيد409 api.idempotency_mismatch؛ وما دام الطلب الأول قيد التنفيذ، يعيد409 api.idempotency_in_progressمعRetry-After: 1. بعد استجابة 5xx أو 429 يُحرَّر المفتاح، وتنفّذ إعادة المحاولة العملية مرة أخرى. نطاق المفتاح هو المؤسسة والجهة المستدعية (مفتاح API أو مستخدم أو مفتاح مصدر مخصص).length ≥ 1, length ≤ 255
X-View-Asstringلمفاتيح API ذات الدور
adminفقط. ينفّذ الطلب بصفة ملف تعريف البيانات<profile>[:viewer|verifier|editor]، مثلemployee:viewer. لا يمكن لمفتاح التثبيت استخدام هذه الترويسة (403).
معاملات ملفات تعريف الارتباط
kb_view_asstringملف تعريف ارتباط وضع «View as» (عرض بصفة) للجلسة. تضبطه العملية
POST /auth/view-asوتمسحه العمليةDELETE /auth/view-as.
نص الطلب
application/json
namestringمطلوبlength ≥ 1, length ≤ 64
rolestringالقيمة الافتراضية: "editor"
data_profilestring | nullملف تعريف البيانات للمفتاح. بدونه يحصل المفتاح على ملف التعريف الافتراضي للمؤسسة. لا ينطبق ملف تعريف البيانات على الدور
admin. يرى مفتاح المشرف كل بيانات المؤسسة، وأي ملف تعريف غيرfullيعيد400 api_keys.data_profile_not_applicable.expires_atstring (date-time) | nullوقت انتهاء صلاحية المفتاح (ISO 8601، في المستقبل). القيمة
nullأو غياب القيمة يعني أن صلاحية المفتاح لا تنتهي.scopesarray of ApiKeyScope | nullنطاقات صلاحيات المفتاح. إن غابت، تتبع النطاقات الدور: يحصل
adminعلىreadوwriteوadmin؛ ويحصلeditorوverifierعلىreadوwrite؛ ويحصلviewerعلىread. لا يصدر النطاقsystemإلا مشرف التثبيت. تُقبل أيضًا النطاقات الدقيقةresource:action(ApiKeyScope)؛ أما النطاقات السابقةreadوwriteوadminفتتوسع إلى حزم من النطاقات.collection_idsarray of integer | nullيقصر المفتاح على هذه المجموعات من المؤسسة. تعمل البطاقات والبحث والإجابات والأحداث فيها فقط، إضافة إلى قيود الدور وملف تعريف البيانات. غياب القيمة أو القائمة الفارغة يعني عدم التقييد. وإذا كان المفتاح المستدعي نفسه مقصورًا على مجموعات، فلا يمكن أن يكون المفتاح الجديد إلا في مجموعاته. وبدون هذا الحقل يحصل المفتاح الجديد على مجموعات المفتاح المستدعي. والقائمة الفارغة أو مجموعة خارج قائمته تعيد
400 api_keys.invalid_collections.items ≤ 100
allowed_cidrsarray of string | nullالشبكات التي يجوز استخدام المفتاح منها، مثل
10.0.0.0/8أو2001:db8::/32. العنوان المفرد شبكة من عنوان واحد. الطلب من عنوان آخر يعيد403 api_keys.ip_not_allowed. غياب القيمة يعني عدم التقييد.items ≤ 50
الاستجابات
200استجابة ناجحة
ترويسات الاستجابة
RateLimit-Policyالحدود السارية، بصيغة مسودة IETF
draft-ietf-httpapi-ratelimit-headers: عناصر مفصولة بفواصل"<name>";q=<quota>;w=<window in seconds>. العنصرkeyهو معدل طلبات مفتاح API (الحصة هي هامش الذروة، والنافذة الزمنية هي مدة إعادة ملئه بالكامل؛ وللجلسة يكونuser، ودون بيانات اعتمادip)؛ وminuteوdayوmonthهي حصص المؤسسة للدقيقة واليوم والشهر التقويمية بتوقيت UTC.RateLimitالمتبقي من كل حد في الترويسة
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-Limitحد العنصر الأشد صرامة في الترويسة
RateLimit-Policy(العنصر الذي بقي فيه أقل عدد من الطلبات).X-RateLimit-Remainingعدد الطلبات المتبقية ضمن الحد الأشد صرامة.
X-RateLimit-Resetعدد الثواني حتى إعادة ضبط الحد الأشد صرامة.
Idempotency-Replayedالقيمة
true: أُعيدت الاستجابة المحفوظة لهذا المفتاحIdempotency-Key، ولم تُنفَّذ العملية مرة أخرى.
application/json
idintegerمطلوبnamestringمطلوبprefixstringمطلوبcreated_atstring (date-time)مطلوبkeystringمطلوبdata_profilestring | nullمطلوبexpires_atstring (date-time)وقت انتهاء الصلاحية. يرد فقط للمفاتيح ذات الصلاحية المحدودة بوقت.
scopesarray of stringنطاقات صلاحيات المفتاح الصريحة. يرد فقط للمفاتيح ذات النطاقات المحددة صراحةً.
collection_idsarray of integerتقييد المجموعات. يرد فقط للمفاتيح المقيَّدة.
allowed_cidrsarray of stringالشبكات المسموح بها. يرد فقط للمفاتيح المقيَّدة.
400الطلب غير صالح: قيمة معامل أو حالة الكائن لا تسمح بالإجراء (الحقل `detail` رسالة نصية).
ترويسات الاستجابة
RateLimit-Policyالحدود السارية، بصيغة مسودة IETF
draft-ietf-httpapi-ratelimit-headers: عناصر مفصولة بفواصل"<name>";q=<quota>;w=<window in seconds>. العنصرkeyهو معدل طلبات مفتاح API (الحصة هي هامش الذروة، والنافذة الزمنية هي مدة إعادة ملئه بالكامل؛ وللجلسة يكونuser، ودون بيانات اعتمادip)؛ وminuteوdayوmonthهي حصص المؤسسة للدقيقة واليوم والشهر التقويمية بتوقيت UTC.RateLimitالمتبقي من كل حد في الترويسة
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-Limitحد العنصر الأشد صرامة في الترويسة
RateLimit-Policy(العنصر الذي بقي فيه أقل عدد من الطلبات).X-RateLimit-Remainingعدد الطلبات المتبقية ضمن الحد الأشد صرامة.
X-RateLimit-Resetعدد الثواني حتى إعادة ضبط الحد الأشد صرامة.
application/json
401لم تُرسَل بيانات اعتماد (لا ملف تعريف ارتباط للجلسة ولا مفتاح API)، أو لم يُعثر على المفتاح.
ترويسات الاستجابة
RateLimit-Policyالحدود السارية، بصيغة مسودة IETF
draft-ietf-httpapi-ratelimit-headers: عناصر مفصولة بفواصل"<name>";q=<quota>;w=<window in seconds>. العنصرkeyهو معدل طلبات مفتاح API (الحصة هي هامش الذروة، والنافذة الزمنية هي مدة إعادة ملئه بالكامل؛ وللجلسة يكونuser، ودون بيانات اعتمادip)؛ وminuteوdayوmonthهي حصص المؤسسة للدقيقة واليوم والشهر التقويمية بتوقيت UTC.RateLimitالمتبقي من كل حد في الترويسة
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-Limitحد العنصر الأشد صرامة في الترويسة
RateLimit-Policy(العنصر الذي بقي فيه أقل عدد من الطلبات).X-RateLimit-Remainingعدد الطلبات المتبقية ضمن الحد الأشد صرامة.
X-RateLimit-Resetعدد الثواني حتى إعادة ضبط الحد الأشد صرامة.
application/json
403الإجراء غير مسموح: الدور غير كافٍ، أو لا وصول إلى المجموعة أو البطاقة، أو يعمل الطلب في وضع «View as»، أو المؤسسة معلّقة أو محذوفة (الحقل `detail` كائن فيه `code: org_suspended | org_deleted`).
ترويسات الاستجابة
RateLimit-Policyالحدود السارية، بصيغة مسودة IETF
draft-ietf-httpapi-ratelimit-headers: عناصر مفصولة بفواصل"<name>";q=<quota>;w=<window in seconds>. العنصرkeyهو معدل طلبات مفتاح API (الحصة هي هامش الذروة، والنافذة الزمنية هي مدة إعادة ملئه بالكامل؛ وللجلسة يكونuser، ودون بيانات اعتمادip)؛ وminuteوdayوmonthهي حصص المؤسسة للدقيقة واليوم والشهر التقويمية بتوقيت UTC.RateLimitالمتبقي من كل حد في الترويسة
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-Limitحد العنصر الأشد صرامة في الترويسة
RateLimit-Policy(العنصر الذي بقي فيه أقل عدد من الطلبات).X-RateLimit-Remainingعدد الطلبات المتبقية ضمن الحد الأشد صرامة.
X-RateLimit-Resetعدد الثواني حتى إعادة ضبط الحد الأشد صرامة.
application/json
422خطأ في صحة البيانات: نص الطلب أو المعاملات لا تطابق المخطط (الحقل `detail` قائمة بأخطاء صحة البيانات)، أو قيمة معامل خارج النطاق المسموح (الحقل `detail` رسالة نصية).
ترويسات الاستجابة
RateLimit-Policyالحدود السارية، بصيغة مسودة IETF
draft-ietf-httpapi-ratelimit-headers: عناصر مفصولة بفواصل"<name>";q=<quota>;w=<window in seconds>. العنصرkeyهو معدل طلبات مفتاح API (الحصة هي هامش الذروة، والنافذة الزمنية هي مدة إعادة ملئه بالكامل؛ وللجلسة يكونuser، ودون بيانات اعتمادip)؛ وminuteوdayوmonthهي حصص المؤسسة للدقيقة واليوم والشهر التقويمية بتوقيت UTC.RateLimitالمتبقي من كل حد في الترويسة
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-Limitحد العنصر الأشد صرامة في الترويسة
RateLimit-Policy(العنصر الذي بقي فيه أقل عدد من الطلبات).X-RateLimit-Remainingعدد الطلبات المتبقية ضمن الحد الأشد صرامة.
X-RateLimit-Resetعدد الثواني حتى إعادة ضبط الحد الأشد صرامة.
application/json
429طلبات كثيرة جدًا (`api.rate_limited`)، أو استُنفدت حصة المؤسسة للدقيقة أو اليوم أو الشهر (`api.quota_exceeded`؛ يحتوي الحقل `error.details` على `quota` و`limit` و`reset_at`)، أو بلغت المؤسسة حدها، أو خدمة الإجابات مشغولة (`answers.engine_busy`). انتظر المدة المذكورة في الترويسة `Retry-After`.
ترويسات الاستجابة
Retry-Afterعدد الثواني التي تنتظرها قبل إعادة محاولة الطلب.
RateLimit-Policyالحدود السارية، بصيغة مسودة IETF
draft-ietf-httpapi-ratelimit-headers: عناصر مفصولة بفواصل"<name>";q=<quota>;w=<window in seconds>. العنصرkeyهو معدل طلبات مفتاح API (الحصة هي هامش الذروة، والنافذة الزمنية هي مدة إعادة ملئه بالكامل؛ وللجلسة يكونuser، ودون بيانات اعتمادip)؛ وminuteوdayوmonthهي حصص المؤسسة للدقيقة واليوم والشهر التقويمية بتوقيت UTC.RateLimitالمتبقي من كل حد في الترويسة
RateLimit-Policy:"<name>";r=<remaining>;t=<seconds until reset>.X-RateLimit-Limitحد العنصر الأشد صرامة في الترويسة
RateLimit-Policy(العنصر الذي بقي فيه أقل عدد من الطلبات).X-RateLimit-Remainingعدد الطلبات المتبقية ضمن الحد الأشد صرامة.
X-RateLimit-Resetعدد الثواني حتى إعادة ضبط الحد الأشد صرامة.
application/json
رموز الأخطاء
الرموز التي قد تعيدها نقطة النهاية هذه في error.code، إضافةً إلى الرموز العامة لكل طلب.
- 409api.idempotency_in_progress
- 400api.idempotency_key_invalid
- 409api.idempotency_mismatch
- 400api_keys.data_profile_not_applicable
- 403api_keys.feature_disabled
- 400api_keys.invalid_cidrs
- 400api_keys.invalid_collections
- 400api_keys.invalid_expires
- 400api_keys.invalid_scopes
- 403auth.admin_required
- 401auth.not_authenticated
- 403auth.system_scope
- 400profiles.unknown
- 403view_as.read_only
إعادة المحاولة بأمان
أرسل الترويسة Idempotency-Key (قيمة UUID مثلًا) مع كل طلب POST وPATCH. إعادة المحاولة بالمفتاح نفسه خلال 24 ساعة تعيد الاستجابة المحفوظة بدل تنفيذ الطلب مرة أخرى.
حدود المعدل
تحمل الاستجابات الترويستين RateLimit وRateLimit-Policy، والترويسات الأقدم X-RateLimit-Limit وX-RateLimit-Remaining وX-RateLimit-Reset. وفي الاستجابة 429 الترويسة Retry-After بالثواني: انتظر ثم أعد المحاولة.