للمطوّرين

اربط أنظمتك بتجربة

واجهة برمجية لقراءة منتجاتك ونماذجك وأرقامك، وإشعارات فورية حين يتغيّر شيء — في باقة المؤسسات.

1

مفتاح

من لوحة التحكم: الإعدادات ← مفاتيح الواجهة البرمجية. سمِّ المفتاح، واختر ما يسمح له به، ومدته. يظهر المفتاح (يبدأ بـ tjr_) مرة واحدة. يعمل باسم من أنشأه وضمن صلاحياته: إن غادر المتجر توقف.

curl "https://tajribah.org/api/v1/products?limit=20" \
  -H "Authorization: Bearer tjr_…"

حتى 600 طلب في الدقيقة لكل مفتاح؛ كل جواب يحمل x-ratelimit-remaining. الأخطاء بصيغة application/problem+json، وتجاوز الحد 429 مع retry-after.

2

الواجهة البرمجية، الإصدار 1

كل جواب بصيغة ثابتة موثّقة: تُضاف حقول ولا تتغيّر أسماؤها ولا تُحذف ما دام الإصدار 1 قائمًا.

الطلبالصلاحيةما يعيده
GET /api/v1/productsproducts:readمنتجاتك، الأحدث أولًا، صفحة بعد صفحة (limit حتى 200، وcursor للصفحة التالية).
GET /api/v1/products/{id}products:readمنتج واحد.
GET /api/v1/modelsmodels:readنماذجك ثلاثية الأبعاد، الأحدث تعديلًا أولًا.
GET /api/v1/analyticsanalytics:readأرقام متجرك خلال 7 أو 30 أو 90 يومًا (range).

المرجع الكامل بصيغة OpenAPI 3.1 (تقرؤه أدوات المطوّرين مباشرة): https://tajribah.org/api/v1/openapi.json

3

الإشعارات البرمجية

من لوحة التحكم: الإعدادات ← الإشعارات البرمجية. أضف عنوان https واختر ما يُخبَر به؛ يظهر سر التوقيع مرة واحدة.

  • product.created — أُضيف منتج في تجربة.
  • product.updated — عُدّل منتج في تجربة.
  • product.deleted — حُذف منتج (يحمل معرّفه فقط).
  • model.published — نُشر نموذج ثلاثي الأبعاد.
  • ai_job.finished — انتهى عمل للذكاء الاصطناعي: اكتمل أو تعذّر أو أُلغي.

كل رسالة موقّعة في الترويسة tajribah-signature. تحقّق منها قبل أن تثق بها — بهذه الدالة في Node.js مثلًا:

const { createHmac, timingSafeEqual } = require('node:crypto');

// header: the tajribah-signature header; rawBody: the body exactly as it arrived.
function verify(secret, header, rawBody, toleranceSeconds = 300) {
  const parts = Object.fromEntries(header.split(',').map((part) => part.split('=')));
  const t = Number(parts.t);
  if (!t || Math.abs(Date.now() / 1000 - t) > toleranceSeconds) return false;
  const expected = createHmac('sha256', secret).update(t + '.' + rawBody).digest();
  const given = Buffer.from(parts.v1 || '', 'hex');
  return given.length === expected.length && timingSafeEqual(given, expected);
}

أجب بـ 2xx خلال 10 ثوانٍ. غير ذلك نعيد المحاولة نحو 21 ساعة، ولا نتبع التحويلات. المعرّف id واحد في كل إعادة: تجاهل المكرر. العنوان الذي يفشل مرارًا يُوقَف ويُخبَر المتجر.

شاهدها على منتجاتك أنت

نجهّز لك عرضًا على منتج من متجرك، ونريك كيف سيظهر في صفحة المنتج قبل أن تلتزم بأي باقة.