DeepLeaf Yield DeepLeaf Yield

مرجع API

كل ما يفعله التطبيق يمر عبر واجهة API بصيغة JSON يمكنك استخدامها بمفتاح مؤسستك. والمرجع الكامل التفاعلي موجود على /api/docs، ومبني على /openapi.json.

تسلسل السجل الذي تتبعه مسارات واجهة API: المؤسسة، ثم المزرعة، ثم البيت المحمي، ثم الخط، ثم الدورة الزراعية.تسلسل السجل الذي تتبعه مسارات واجهة API: المؤسسة، ثم المزرعة، ثم البيت المحمي، ثم الخط، ثم الدورة الزراعية.
تتبع مسارات السجل التسلسل من المؤسسة نزولًا إلى الدورة الزراعية.

المصادقة

curl -H "X-API-Key: dl_…" https://your-deepleaf-address/api/organizations/org-1
curl -H "Authorization: Bearer dl_…" https://your-deepleaf-address/api/organizations/org-1

يحصل المفتاح المفقود أو غير المعروف أو الملغى على 401. ويعيد المسار التابع لمؤسسة أخرى 404. ويحصل مفتاح العضو على 403 في إدارة المفاتيح ومدفوعات الفوترة؛ راجع المؤسسة والمفاتيح. واستخدم العنوان الذي تفتح عليه التطبيق.

اختصار المسارات

فيما يلي، يرمز {cycle} إلى المسار الكامل للدورة الزراعية:

/api/organizations/{organization_id}/farms/{farm_id}/greenhouses/{greenhouse_id}/rows/{row_id}/cycles/{cycle_id}

تُكتب الأسابيع بصيغة 2026-W40 أو بأي تاريخ في ذلك الأسبوع بصيغة YYYY-MM-DD.

التحليل

الطريقة والمسارما يفعله
POST /api/observationsيرفع صورة أو فيديو (حقل multipart باسم file، مع الحقول الاختيارية mode وconf وsample_seconds وmax_frames وmm_per_pixel). ويعيد معرّف مهمة.
GET /api/observations/{id}الحالة والتقدم والنتيجة، مع الإطارات والثمار والسيقان والنباتات وquality.
GET /api/observations/{id}/frames/{frame}/{name}صورة إطار أو طبقتها.
POST /api/examples/{key}يحلّل إحدى الصور النموذجية.
POST {cycle}/videosيرفع جولة ويحفظها في دورة وأسبوع (week).
POST {cycle}/videos/batchحتى 12 مقطع فيديو في حقول files متكررة، بترتيب المشي، تُحلَّل وتُحتسب جولة واحدة. ويعرض الحقل clips في المهمة تقدّم كل مقطع.

السجل

الطريقة والمسارما يفعله
GET /api/organizations/{org}شجرة المزارع والبيوت المحمية والخطوط والدورات في المؤسسة.
POST …/farms، …/greenhouses، …/rows، …/cyclesينشئ مستوى.
PATCH على مسار المستوىيغيّر الأسماء والتفاصيل. وتبقى المعرّفات كما هي.
GET على مسار المستوى + /contentsأعداد كل ما تحت المستوى.
DELETE على مسار المستوى409 مع الأعداد ما دام يحتوي على أي شيء. ويحذفه ?cascade=true مع محتواه.

السجلات

الطريقة والمسارما يفعله
POST / GET {cycle}/harvestsيسجّل حصادًا واحدًا (week، kg، note)، أو يعرض قائمتها. ويصفّي ?week= النتائج.
POST {cycle}/harvests/csvيرفع ملفًا بصيغة week,kg[,note].
PATCH / DELETE {cycle}/harvests/{id}يعدّل حصادًا واحدًا أو يحذفه.
POST / GET {cycle}/irrigationيسجّل إدخالًا واحدًا، أو يعرض القائمة من الأحدث إلى الأقدم.
PATCH / DELETE {cycle}/irrigation/{id}يعدّل إدخالًا واحدًا أو يحذفه.
POST / GET {cycle}/climateيضيف قراءات بصيغة {"points": [...]}، أو يعرض قائمتها (metric، from، to، limit، offset).
POST {cycle}/climate/csv/previewيفحص ملف مناخ دون تخزينه: الصيغة المكتشفة، ومقياس كل عمود ووحدته وتحويله ودرجة الثقة فيه، والمنطقة الزمنية والفترة الزمنية، والصفوف الأولى، والتحذيرات (warnings) والمشكلات المانعة (problems)، ومطابقة (mapping) للتأكيد. ويقبل حقول النموذج نفسها التي يقبلها الرفع، ومنها compartment وdate_order (dmy أو mdy).
POST {cycle}/climate/csvيرفع ملف مناخ. أرسل mapping من المعاينة لاستيراد ما عوين بالضبط (والأعمدة غير المذكورة فيها لا تُستورد)، أو columns لتسمية الأعمدة بنفسك. ويُرفض بالرمز 400 ما دامت في الملف مشكلات، وبالرمز 413 إذا تجاوز الحد الأقصى للحجم.
POST {cycle}/climate/file/previewيفحص تصديرًا من حاسوب المناخ (CSV أو نص أو .xlsx) دون حفظه: الملف، والساعة التي يُقرأ بها (time_zone)، وكل عمود مع قياسه ووحدته، والقيم المضبوطة، والساعات الأولى، وما حُفظ مسبقًا، وwarnings، وproblems المانعة، وmapping للتأكيد.
POST {cycle}/climate/fileيحفظ ساعات التصدير بحسب mapping المؤكَّد؛ ويحفظ remember اختيارات الأعمدة للدفيئة. الساعات المستوردة مجددًا تُحدَّث ولا تتكرر أبدًا.
POST {cycle}/climate/ingestالاستيراد نفسه لبرنامج نصي خاص بك: الملف في متن الطلب، والمفتاح في ترويسة فقط، واختيارات الأعمدة المحفوظة للدفيئة. راجع استيراد بيانات حاسوب المناخ.
GET / DELETE {greenhouse}/climate/file-mappingاختيارات الأعمدة المحفوظة لدفيئة، أو نسيانها.
GET {cycle}/climate/importsعمليات استيراد المناخ الأخيرة للدورة، من الأحدث إلى الأقدم.
POST {cycle}/climate/imports/{id}/undoيتراجع عن استيراد واحد: يحذف القراءات التي أضافها ويستعيد القيم التي غيّرها. 409 إذا غيّر استيراد لاحق القراءات نفسها، إلا مع {"confirm": true}.
PATCH / DELETE {cycle}/climate/{id}يعدّل قراءة واحدة أو يحذفها.
POST {cycle}/fruit-massغرامات مُدخلة لـ green_g وturning_g وred_g.
POST {cycle}/weatherيحدّث الطقس الخارجي لموقع البيت المحمي فورًا (past_days، forecast_days).

الأسابيع والتوقعات

الطريقة والمسارما يفعله
GET {cycle}/weeks/{week}قراءة الأسبوع: أعداد الجولة، والحصاد، والري، والمناخ، وإنتاجية المياه، والتوقعات.
GET {cycle}/forecast?week=التوقعات لأسبوع الجولة وللأسابيع السبعة التالية (افتراضيًا: أسبوع آخر جولة).
POST / GET {cycle}/forecastsيصدر التوقعات الحالية ويحفظها، أو يعرض التوقعات المحفوظة مع الحصاد المسجّل منذ ذلك الحين.
GET {cycle}/backtestالخطأ المعاد تشغيله لكل أفق مقابل الحصاد.
GET {cycle}/export.csvصف واحد لكل أسبوع.

تصحيحات الجولات

فيما يلي، يرمز {walk} إلى /api/organizations/{org}/walks/{walk_id}، حيث walk_id هو معرّف مهمة الجولة. راجع صحّح جولة.

الطريقة والمسارما يفعله
GET {walk}/correctionsتصحيحات الجولة، وثمارها بعد التصحيح، وأسابيع الدورة الزراعية المحفوظة فيها، والأعداد model وcorrected.
POST {walk}/correctionsيضيف تصحيحًا. قيمة kind هي ripeness (track_id، ripeness)، أو remove (track_id)، أو add (ripeness، frame_id، وbox بصيغة [x1, y1, x2, y2] بالبكسل)، أو counts (counts مع green أو turning أو red). ويقبل كلٌّ منها note اختيارية.
PATCH {walk}/corrections/{correction_id}يغيّر درجة النضج أو الإطار أو الأعداد أو الملاحظة. ويبقى النوع والثمرة كما هما.
DELETE {walk}/corrections/{correction_id}يتراجع عن تصحيح واحد.

يحمل كل رد الأعداد model وcorrected للجولة. ويستطيع أي مفتاح للمؤسسة التصحيح، مفتاح مسؤول أو مفتاح عضو. وجولة مؤسسة أخرى تُرجع 404، والجولة التي ما زالت قيد التحليل تُرجع 409. والتصحيح الثاني على الثمرة نفسها، أو المجموعة الثانية من الأعداد، أو تجاوز 2,000 تصحيح في جولة واحدة، يُرجع 409. والأعداد أعداد صحيحة من 0 إلى 1,000,000، والملاحظة لا تتجاوز 500 حرف.

الجلسة والحالة

الطريقة والمسارما يفعله
GET /api/healthما إذا كان التحليل وقاعدة البيانات متاحين. لا يحتاج إلى مفتاح.
GET / POST / DELETE /api/sessionيقرأ الجلسة (مع دور المفتاح role)، أو يسجّل الدخول (ويضبط ملف تعريف الارتباط)، أو يسجّل الخروج.
GET / POST /api/organizations/{org}/keysيعرض المفاتيح أو ينشئها. لمفاتيح المسؤول فقط، ويُعرض المفتاح الجديد مرة واحدة.
PATCH …/keys/{id}، POST …/keys/{id}/revokeيغيّر اسم مفتاح أو يلغيه. ويحصل آخر مفتاح مسؤول على 409.