توثيق API

يتيح لك API الخاص بـ YourImageShare رفع الملفات وعرضها وحذفها برمجياً. إنه API بسيط بصيغة JSON/REST، ولا يحتاج إلى أي SDK: يكفيك عميل HTTP ومفتاح API. كما تتوفر مكتبات رسمية لـ JavaScript وPython وMCP.

جميع مكتبات العميل والأدوات أدناه مفتوحة المصدر. يمكنك تصفح الشيفرة أو الإبلاغ عن المشكلات أو المساهمة عبر مستودعنا الرسمي على GitHub: github.com/yourimageshare/yourimageshare.

الرابط الأساسي: https://yourimageshare.com/api · الصيغة: JSON في الطلب والاستجابة، عدا عمليات الرفع فهي multipart/form-data · المصادقة: مفتاح API مع كل طلب. · المواصفات المقروءة آلياً: /openapi.json (OpenAPI 3.1)، للوكلاء وأدوات توليد الشيفرة التي لا تفضّل تحليل هذه الصفحة.

الحصول على مفتاح API

سجّل الدخول، وافتح حسابي، ثم تبويب API. سيظهر مفتاحك هناك مع زر إعادة التوليد. إعادة توليد المفتاح تُبطل القديم فوراً، فحدّث كل مكان يستخدمه قبل الضغط على الزر.

ويضم هذا التبويب أيضاً مفتاح الرفع فقط المستقل - راجع النصيحة أدناه وإضافات المنتديات لمعرفة متى تستخدمه بدلاً من المفتاح الكامل.

المصادقة

أرسل مفتاحك في ترويسة (وهو الأفضل، لأن سلاسل الاستعلام تنتهي غالباً في سجلات الوصول وسجلات الوكيل وترويسات Referer):

X-API-Key: YOUR_API_KEY

كما يعمل المعامل ?key= في الرابط، وهو باقٍ للتوافق مع التكاملات القديمة وأوامر curl السريعة لمرة واحدة. إذا وُجد الاثنان معاً، تُعتمد الترويسة.

?key=YOUR_API_KEY

نصيحة: تعامل مع مفتاحك كما تتعامل مع كلمة المرور - فكل من يملكه يستطيع الرفع والعرض والتعديل والحذف في حسابك. كل طلب ناجح يُسجَّل ويظهر كمخطط في تبويب API بصفحة حسابك، موزعاً حسب اليوم ونوع الطلب. وإن كان لا بد من وضع مفتاح في مكان يراه الآخرون - إضافة منتدى أو ملف إعدادات عام - فاستخدم مفتاح الرفع فقط من التبويب نفسه: فهو يستطيع الرفع فقط، أما عرض الملفات المرفوعة أو الاستعلام عنها أو تعديلها أو حذفها فيرفضها بالخطأ 401.

نقاط النهاية

الرفع والعرض والحذف تشترك في المصادقة وحدود الاستخدام نفسها؛ ويمكن إرسال الملفات الكبيرة على أجزاء أولاً.

POST /api - رفع ملف

يرفع ملفاً واحداً للحساب الموثَّق.

الحقلالنوعمطلوبالوصف
uploadsfileواحد من هذه الثلاثةالملف المراد رفعه، حتى 100MB (الحد لطلب واحد عبر شبكتنا). ملف واحد لكل طلب - لا تدعم هذه النقطة رفع عدة ملفات دفعة واحدة.
urlstringرابط http(s) عام لصورة أو فيديو. نحن من ينزّله، لذا تعمل الملفات حتى 200MB.
upload_idstringملف أُرسل مسبقاً على أجزاء إلى POST /api/chunk، حتى 200MB.
filenamestringلامع upload_id: اسم الملف الأصلي.
expires_inintegerلاحذف هذا الملف تلقائياً بعد هذا العدد من الثواني (من 60 إلى 31,536,000، أي من دقيقة إلى سنة). اتركه فارغاً للرفع الدائم العادي.
allow_duplicatebooleanلاتخزين نسخة جديدة حتى لو سبق أن رفع حسابك الملف نفسه تماماً (راجع duplicate أدناه).
keep_originalbooleanلاالإبقاء على الصورة كما رُفعت تماماً. بدونه تُحسَّن ملفات JPG/PNG التي تتجاوز 1 MB إلى WebP. وتُزال البيانات الوصفية مثل GPS في الحالتين.
visibilitystringلاunlisted (الافتراضي): الملف وصفحته يعملان لكل من لديه الرابط، لكنه غير مدرج في أي مكان. private: الملف فقط - رابط الصفحة يحوّل الجميع غيرك مباشرة إلى الملف (بدون تعليقات أو تفاعلات أو إعلانات). public: مدرج في الموقع وقابل للفهرسة.
titlestringلاحتى 90 حرفاً، يظهر في صفحة الملف المرفوع.
descriptionstringلاحتى 500 حرف.

الأنواع المقبولة: صور JPG, PNG, GIF, WEBP, AVIF, BMP, TIFF, HEIC أو HEIF؛ وفيديو MP4, WEBM, AVI, MOV, MKV, MPEG, WMV, FLV أو 3GP (قد تتوسع القائمة بمرور الوقت). تُخزَّن HEIC/HEIF وTIFF بصيغة WebP، ويُحوَّل الفيديو غير MP4/WebM إلى MP4، وتُحوَّل صور JPEG/PNG الكبيرة إلى WebP بعد الرفع بقليل متى أصبح حجمها أصغر بشكل ملحوظ. الحجم الأقصى: 200MB؛ وتُرفض الملفات الأكبر أو غير القابلة للقراءة بالخطأ 422.

الاستجابة - 200 OK:

{
  "type": "success",
  "msg": "success",
  "data": {
    "id": "aB3xY9qRz1",
    "type": "image",
    "path": "https://i.yourimageshare.com/aB3xY9qRz1.png",
    "src": "https://yourimageshare.com/ib/aB3xY9qRz1.png",
    "direct": "https://yourimageshare.com/ib/aB3xY9qRz1",
    "thumb": "https://i.yourimageshare.com/thumb-aB3xY9qRz1.webp",
    "width": 1920,
    "height": 1080,
    "size": 482113,
    "locked": false,
    "visibility": "unlisted",
    "title": null,
    "description": null,
    "expires_at": null,
    "duplicate": false,
    "delete_url": "https://yourimageshare.com/delete#iV3x...k9"
  }
}
الحقلالوصف
idالمعرّف الفريد للملف.
typeimage أو video.
pathرابط تخزين الملف كما رُفع. قد يتغير بعد قليل عند تحويل الملف (WebP/MP4)، لذا احفظ src وليس path.
srcرابط الملف المباشر الدائم - يفتح دائماً الملف الحالي، ومناسب لـ src في <img>/<video> وللحفظ.
directصفحة الملف على YourImageShare (العنوان والوصف والتعليقات وخيارات المشاركة).
thumbصورة مصغرة WebP بعرض 280px (وللفيديو، إطاره الأول)، أو null.
width, heightأبعاد العرض بالبكسل (بعد التقويم؛ وحجم إطار الفيديو)، أو null إن كانت غير معروفة.
sizeحجم الملف بالبايت كما خُزّن.
lockedtrue إذا كان الملف محمياً بكلمة مرور.
visibilityprivate أو unlisted أو public (راجع حقل الطلب أعلاه).
title, descriptionكما ضُبطا، أو null. يمر النص بالإشراف نفسه المطبق في الموقع.
delete_urlللملفات الجديدة فقط: رابط خاص يحذف هذا الملف بدون مفتاح API. يظهر مرة واحدة (يُخزَّن تجزئته فقط) - احتفظ به إن احتجت إليه.
expires_atطابع زمني بصيغة ISO 8601 لموعد الحذف التلقائي لهذا الملف، أو null إن لم تكن له مدة انتهاء.
duplicatetrue إذا كان حسابك قد رفع الملف نفسه تماماً من قبل: يُعاد ذلك الملف ولا يُخزَّن شيء جديد. لا ينطبق على الملفات ذات مدة الانتهاء أو مع allow_duplicate=1.

الملفات المؤقتة: عندما يحين expires_at، يُحذف الملف من التخزين وتبدأ صفحته بإرجاع 410 Gone خلال نحو 5 دقائق. لا يمكن التراجع عن ذلك أو تمديده لاحقاً - احذف مبكراً عبر نقطة DELETE إن أردت إزالته قبل ذلك، أو أعد الرفع بقيمة expires_in جديدة إن أردت أن يبقى مدة أطول.

POST /api/chunk - الملفات الكبيرة

يتسع الطلب الواحد لـ 100MB كحد أقصى. للملفات الأكبر (حتى 200MB)، أو لإبقاء كل طلب صغيراً على اتصال بطيء، أرسل الملف على أجزاء لا تتجاوز 5MB، ثم أنهِ العملية عبر POST /api:

  1. اختر معرّف رفع: 32 حرفاً سداسي عشري عشوائياً.
  2. لكل جزء، أرسل POST /api/chunk (multipart/form-data) مع upload_id وindex (يبدأ من 0) وtotal (عدد الأجزاء) والبايتات في chunk. تكون الاستجابة {"type": "success", "chunk_size": 5242880}.
  3. أرسل POST /api مع upload_id وfilename بدلاً من uploads، إضافة إلى أي حقول رفع أخرى. الاستجابة هي استجابة الرفع العادية.

تُحذف أجزاء الرفع غير المكتمل بعد ساعتين. وحده طلب POST /api الختامي يُحتسب ضمن حدود الرفع.

GET /api/{id} وPATCH /api/{id} - ملف واحد

يعيد GET أحد ملفاتك المرفوعة بالحقول نفسها الموجودة في القائمة أدناه. ويغيّر PATCH قيمة visibility أو title أو description (حقول نموذج أو JSON؛ العنوان أو الوصف الفارغ يمسحه) ويعيد الملف بعد التحديث. كلاهما يحتاج إلى مفتاح API الكامل؛ والخطأ 404 إن لم يوجد هذا الملف في حسابك.

curl -X PATCH https://yourimageshare.com/api/aB3xY9qRz1 \
  -H "X-API-Key: YOUR_API_KEY" -d visibility=public -d title="Sunset"

POST /api/{id}/replace - استبدال الملف

يستبدل الملف الكامن وراء أحد ملفاتك المرفوعة ويُبقي معرّفه وصفحته وكل الروابط. يعمل أي نوع مسموح، حتى لو كان مختلفاً (يمكن أن تصبح الصورة فيديو). أرسل الملف الجديد في uploads (أو upload_id لملف أُرسل على أجزاء عبر POST /api/chunk)؛ ويعمل keep_original كما في الرفع. يخضع الملف الجديد للفحوصات والتحويلات نفسها المطبقة على أي رفع جديد، وتُزال النسخة السابقة. يحتاج إلى مفتاح API الكامل؛ والخطأ 404 إن لم يوجد هذا الملف في حسابك، و409 إن كان محمياً بكلمة مرور أو محدود المشاهدات.

curl -X POST https://yourimageshare.com/api/aB3xY9qRz1/replace \
  -H "X-API-Key: YOUR_API_KEY" -F uploads=@new-version.png

GET /api - عرض ملفاتك المرفوعة

يعيد قائمة مقسّمة إلى صفحات بالملفات المرفوعة للحساب الموثَّق (من أي مصدر: API أو الموقع أو المحرر)، الأحدث أولاً، 50 في الصفحة.

المعاملمكانهمطلوبالوصف
pagequeryلارقم الصفحة، والافتراضي 1.

الاستجابة - 200 OK:

{
  "type": "success",
  "data": [
    {
      "id": "aB3xY9qRz1",
      "type": "image",
      "title": null,
      "path": "https://i.yourimageshare.com/aB3xY9qRz1.webp",
      "src": "https://yourimageshare.com/ib/aB3xY9qRz1.webp",
      "direct": "https://yourimageshare.com/ib/aB3xY9qRz1",
      "thumb": "https://i.yourimageshare.com/thumb-aB3xY9qRz1.webp",
      "width": 1920,
      "height": 1080,
      "size": 482113,
      "locked": false,
      "visibility": "unlisted",
      "description": null,
      "expires_at": null,
      "created_at": "2026-07-23T15:43:28+01:00"
    }
  ],
  "meta": { "current_page": 1, "last_page": 1, "total": 1 }
}

للحقول هنا المعنى نفسه الموجود في استجابة الرفع أعلاه (وفي الملف المحمي بكلمة مرور تكون path وthumb روابط موقّعة قصيرة العمر). وللاستعلام عن ملف واحد عبر id استخدم GET /api/{id}.

DELETE /api/{id} - حذف ملف

يحذف نهائياً أحد الملفات المرفوعة للحساب الموثَّق. لا يمكن التراجع عن ذلك من API. {id} هو القيمة التي تعيدها نقطتا الرفع والعرض في الحقل id.

الاستجابة - 200 OK:

{ "type": "success", "msg": "Deleted." }

والخطأ 404 إن لم يوجد ملف بهذا المعرّف في حسابك (إما أنه لم يكن لك أصلاً، أو أنه حُذف من قبل).

POST /api/compare - شريط المقارنة قبل/بعد

ينشئ مقارنة قبل/بعد بين صورتين من ملفاتك المرفوعة: صفحة بها شريط منزلق على /c/{id} ويمكن تضمينها أيضاً في أي موقع. يعمل مفتاح الرفع فقط أيضاً. أرسل before وafter (معرّفا الملفين، مطلوبان)، واختيارياً title وlabel_before وlabel_after (الافتراضي "Before" و"After").

الاستجابة - 201 Created:

{
  "type": "success",
  "id": "P7uAYy04VA",
  "url": "https://yourimageshare.com/c/P7uAYy04VA",
  "embed_url": "https://yourimageshare.com/embed/c/P7uAYy04VA",
  "embed": { "script": "<blockquote class=\"YISEmbed\" ...", "iframe": "<iframe ..." }
}

والخطأ 422 إن لم يكن أحد المعرّفين لصورة من ملفاتك (لا يمكن استخدام الفيديوهات ولا الصور المحمية بكلمة مرور).

حدود الاستخدام

لكل مفتاح API حصص مستقلة في الدقيقة وفي اليوم، إضافة إلى سقف يومي أوسع لكل عنوان IP كحماية من استخدام عنوان واحد لعدة مفاتيح بالتناوب. يشترك الرفع والعرض والحذف في الحدود نفسها.

الفترةالحد الافتراضيالنطاق
في الدقيقة20 طلباًلكل مفتاح API
في اليوم500 طلبلكل مفتاح API كامل
في اليوم2,000 طلبلكل مفتاح رفع فقط (الإضافات التي تنقل مكتبات وسائط كاملة)
في اليوم2,000 طلبلكل عنوان IP
في الدقيقة300 جزءلكل مفتاح API، لنقطة POST /api/chunk فقط

قد تتغير هذه الحدود. تتضمن كل استجابة ترويسات حدود الاستخدام القياسية:

X-RateLimit-Limit: 20
X-RateLimit-Remaining: 14

يُعاد الخطأ 429 عند تجاوز أحد الحدود، مع ترويسة Retry-After تحدد عدد الثواني التي عليك انتظارها.

الأخطاء

تستخدم كل استجابات الأخطاء الشكل نفسه، بغض النظر عن النقطة أو السبب:

{ "type": "error", "errors": "A human-readable description of what went wrong." }
الحالةالمعنى
401مفتاح API مفقود أو غير صالح.
403الحساب أو عنوان IP الحالي محظور من الرفع.
404لا يوجد ملف مطابق لهذا المعرّف في هذا الحساب (عرض أو تعديل أو حذف).
413الطلب يتجاوز 100MB. أرسل الملف على أجزاء (POST /api/chunk) أو أرسل رابطاً له في url بدلاً من ذلك (حتى 200MB).
422فشل التحقق - لم يُرسل ملف أو رابط، أو نوع ملف غير مدعوم، أو بيانات صورة غير قابلة للقراءة، أو أبعاد تتجاوز حد 30000x30000px، أو ملف يتجاوز 200MB، أو upload_id غير مكتمل أو منتهي، أو url تعذّر تنزيله (تذكر الرسالة السبب).
429تم تجاوز حد الاستخدام - راجع حدود الاستخدام أعلاه.
500حدث عطل غير متوقع في الخادم. يمكنك إعادة المحاولة بأمان.

مكتبات العميل

حزم SDK رسمية تغلّف النقاط أعلاه بنتائج مصنّفة الأنواع وتُطلق استثناءً عند أخطاء API بدلاً من التعامل المباشر مع HTTP.

JavaScript / TypeScript

بلا أي اعتماديات، وتعمل في Node.js والمتصفحات. متوفرة أيضاً على JSR باسم @yourimageshare/yourimageshare - npx jsr add @yourimageshare/yourimageshare - المصدر نفسه، منشور مباشرة بلغة TypeScript.

npm install yourimageshare

Python

اعتمادية واحدة (requests)، وPython 3.8+.

pip install yourimageshare

PHP

بلا اعتماديات Composer (تستخدم امتداد curl الخاص بـ PHP)، وPHP 7.4+. المصدر على GitHub.

composer require yourimageshare/yourimageshare-php

Go

بلا اعتماديات (المكتبة القياسية فقط)، وGo 1.18+. راجع pkg.go.dev للتوثيق المرجعي الكامل.

go get github.com/yourimageshare/yourimageshare/go

Rust

اعتماديتان (ureq لطلبات HTTP المتزامنة - دون جلب بيئة تشغيل async - وserde)، وRust 1.70+. المصدر على GitHub.

cargo add yourimageshare

Ruby

بلا اعتماديات gem (المكتبة القياسية Net::HTTP + json)، وRuby 2.7+. المصدر على GitHub.

gem install yourimageshare

.NET

اعتمادية واحدة (System.Text.Json من Microsoft)، وتستهدف netstandard2.0 فتعمل مع .NET Framework و.NET الحديث. المصدر على GitHub. مبنية ومختبرة على هذا API الفعلي؛ والنشر على NuGet قريباً.

dotnet add package YourImageShare

Dart / Flutter

اعتمادية واحدة (http، الحزمة الرسمية من فريق Dart)، وDart 2.17+. المصدر على GitHub. مبنية ومختبرة على هذا API الفعلي؛ والنشر على pub.dev قريباً.

dart pub add yourimageshare

Elixir

اعتمادية واحدة (Req)، وElixir 1.14+. تعيد tuples موسومة {:ok, result}| {:error, reason} - المكافئ المباشر لمعالجة الأخطاء في هذا API ببقية حزم SDK - إضافة إلى نسخ bang التي تُطلق استثناءً. المصدر على GitHub، والتوثيق على HexDocs.

{:yourimageshare, "~> 1.1"}

خادم MCP

لوكلاء البرمجة بالذكاء الاصطناعي (Claude Code وCursor وغيرها من الأدوات المتوافقة مع MCP) - ألصق لقطة شاشة في تقرير خطأ أو وصف طلب دمج أو محادثة دعم كرابط حقيقي بدلاً من base64 أو خطوة رفع يدوية. ويعمل بالطريقة نفسها مع Claude Desktop وأي عميل MCP آخر.

مستضاف، دون تثبيت أي شيء: أضفه كخادم MCP بعيد (في Claude: الإعدادات › الموصّلات › إضافة موصّل مخصص؛ وكذلك ChatGPT وCursor وVS Code وغيرها من العملاء التي تقبل رابط خادم) مع مفتاح API في الرابط:

https://yourimageshare.com/mcp?key=YOUR_API_KEY

يمكن للعملاء الذين يتيحون ضبط الترويسات استخدام https://yourimageshare.com/mcp مع Authorization: Bearer YOUR_API_KEY بدلاً من ذلك. الرابط الذي يحتوي مفتاحك يعمل كما تعمل كلمة المرور: أبقِه خاصاً، واحصل على مفتاح جديد من حسابي إن تسرّب. على الخادم المستضاف، تقبل upload_image رابطاً عاماً (حتى 200MB) أو محتوى base64 مضمّناً (حتى 15MB). وبدون مفتاح، يظل https://yourimageshare.com/mcp يرفع بشكل مجهول كما يفعل الموقع: غير مدرج أو خاص فقط، وبحدود أقل، ويُحذف الملف المرفوع عبر delete_url الذي يعيده. أما الأدوات الأخرى فتحتاج إلى مفتاح.

محلياً: شغّله مباشرة عبر npx بدون خطوة تثبيت (ويمكنه أيضاً قراءة الملفات من قرصك):

npx yourimageshare-mcp

الأدوات: upload_image (ملف محلي أو محتوى مضمّن أو رابط، حتى 200MB، مع خيارات الظهور والعنوان والحذف التلقائي)، وlist_uploads وget_upload وupdate_upload وdelete_upload.

وهو أيضاً في سجل MCP الرسمي (باسم io.github.yourimageshare/yourimageshare) ومدرج على Smithery وGlama، إن كان عميل MCP لديك يثبّت من أحدهما.

جديد على MCP؟ راجع كيف تربط Claude وChatGPT بهذا API عبر MCP لشرح كامل للإعداد.

جميعها مرخّصة بترخيص MIT. لا توجد مكتبة رسمية للغتك؟ تغطي الأمثلة البرمجية أدناه الاستدعاء المباشر لـ API.

أمثلة برمجية

curl

# Upload a file
curl "https://yourimageshare.com/api" \
  -H "X-API-Key: YOUR_API_KEY" \
  -F "uploads=@/path/to/photo.jpg"

# Upload from a link (files up to 200MB; one direct upload request stops at 100MB -
# bigger files go in pieces, see Large Files above)
curl "https://yourimageshare.com/api" \
  -H "X-API-Key: YOUR_API_KEY" \
  -F "url=https://example.com/video.mp4"

# Upload a file that auto-deletes after 1 hour
curl "https://yourimageshare.com/api" \
  -H "X-API-Key: YOUR_API_KEY" \
  -F "uploads=@/path/to/photo.jpg" \
  -F "expires_in=3600"

# List uploads
curl "https://yourimageshare.com/api" -H "X-API-Key: YOUR_API_KEY"

# Upload a file without a page of its own (file only) and give it a title
curl "https://yourimageshare.com/api" \
  -H "X-API-Key: YOUR_API_KEY" \
  -F "uploads=@/path/to/photo.jpg" \
  -F "visibility=private" \
  -F "title=Sunset"

# Look up one upload, then make it public
curl "https://yourimageshare.com/api/aB3xY9qRz1" -H "X-API-Key: YOUR_API_KEY"
curl -X PATCH "https://yourimageshare.com/api/aB3xY9qRz1" \
  -H "X-API-Key: YOUR_API_KEY" -d "visibility=public"

# Delete an upload
curl -X DELETE "https://yourimageshare.com/api/aB3xY9qRz1" -H "X-API-Key: YOUR_API_KEY"

JavaScript (fetch)

const API_KEY = 'YOUR_API_KEY';
const BASE = 'https://yourimageshare.com/api';

async function uploadFile(file) {
  const form = new FormData();
  form.append('uploads', file);

  const res = await fetch(BASE, {
    method: 'POST',
    headers: { 'X-API-Key': API_KEY },
    body: form,
  });
  const json = await res.json();
  if (json.type !== 'success') throw new Error(json.errors);
  return json.data;
}

async function listUploads(page = 1) {
  const res = await fetch(`${BASE}?page=${page}`, {
    headers: { 'X-API-Key': API_KEY },
  });
  return res.json();
}

async function deleteUpload(id) {
  const res = await fetch(`${BASE}/${id}`, {
    method: 'DELETE',
    headers: { 'X-API-Key': API_KEY },
  });
  return res.json();
}

Python (requests)

import requests

API_KEY = "YOUR_API_KEY"
BASE = "https://yourimageshare.com/api"

HEADERS = {"X-API-Key": API_KEY}

# Upload a file
with open("/path/to/photo.jpg", "rb") as f:
    res = requests.post(BASE, headers=HEADERS, files={"uploads": f})
res.raise_for_status()
upload = res.json()["data"]

# List uploads
res = requests.get(BASE, headers=HEADERS, params={"page": 1})
uploads = res.json()

# Delete an upload
res = requests.delete(f"{BASE}/{upload['id']}", headers=HEADERS)

PHP (curl)

<?php

$apiKey = 'YOUR_API_KEY';
$base = 'https://yourimageshare.com/api';

// Upload a file
$curl = curl_init($base);
curl_setopt_array($curl, [
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => ["X-API-Key: $apiKey"],
    CURLOPT_POSTFIELDS => ['uploads' => new CURLFile('/path/to/photo.jpg')],
    CURLOPT_RETURNTRANSFER => true,
]);
$upload = json_decode(curl_exec($curl), true)['data'];
curl_close($curl);

// List uploads
$curl = curl_init("$base?page=1");
curl_setopt($curl, CURLOPT_HTTPHEADER, ["X-API-Key: $apiKey"]);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$uploads = json_decode(curl_exec($curl), true);
curl_close($curl);

Go (net/http)

حزمة Go SDK الرسمية أعلاه تتولى ذلك عنك - وهذه النسخة الخام لمن يفضّل عدم إضافة الاعتمادية.

package main

import (
    "bytes"
    "encoding/json"
    "io"
    "mime/multipart"
    "net/http"
    "os"
)

const apiKey = "YOUR_API_KEY"
const base = "https://yourimageshare.com/api"

func uploadFile(path string) (map[string]any, error) {
    file, err := os.Open(path)
    if err != nil {
        return nil, err
    }
    defer file.Close()

    body := &bytes.Buffer{}
    writer := multipart.NewWriter(body)
    part, _ := writer.CreateFormFile("uploads", path)
    io.Copy(part, file)
    writer.Close()

    req, _ := http.NewRequest("POST", base, body)
    req.Header.Set("Content-Type", writer.FormDataContentType())
    req.Header.Set("X-API-Key", apiKey)

    res, err := http.DefaultClient.Do(req)
    if err != nil {
        return nil, err
    }
    defer res.Body.Close()

    var result map[string]any
    json.NewDecoder(res.Body).Decode(&result)
    return result, nil
}

أدوات لقطات الشاشة

إضافة للمتصفح مع إعدادات وسكربتات جاهزة لإرسال لقطات الشاشة مباشرة إلى YourImageShare دون رفع يدوي. وكل منها يرفع عبر نقطة /api نفسها الموثقة أعلاه.

إضافة المتصفح (Chrome وFirefox)

تتجاوز إضافة YourImageShare Capture لمتصفحي Chrome وFirefox السكربتات وملفات الإعداد بالكامل. تلتقط المنطقة المرئية، أو جزءاً تحدده بالسحب، أو صفحة كاملة قابلة للتمرير، ثم تفتح محرراً مدمجاً للأسهم والنصوص والتمويه/الحجب وغيرها من التعليقات، وبعدها تنزّل النتيجة، أو تنسخها إلى الحافظة، أو تنشرها مباشرة على YourImageShare بنقرة واحدة. يستخدم النشر نقطة /api نفسها الموثقة أعلاه - أضف مفتاح API مرة واحدة في إعدادات الإضافة، وبعدها يعيد كل نشر رابطاً جاهزاً للمشاركة فوراً. تعمل على Chrome لسطح المكتب (والمتصفحات المبنية على Chromium الأخرى) وFirefox لسطح المكتب وFirefox لأجهزة Android.

احصل على YourImageShare Capture لـ Firefox احصل على YourImageShare Capture لـ Chrome

ShareX

نزّل أداة الرفع المخصصة أدناه، ثم في ShareX انتقل إلى Destinations > Custom uploader settings > Import > from file، وافتح ملف .sxcu الذي نزّلته، واستبدل YOUR_API_KEY في حقل Headers بمفتاحك الحقيقي. اجعلها وجهة الصور/الملفات لديك وستُرفع اللقطات تلقائياً.

تنزيل YourImageShare.sxcu

الحذف: رابط "Delete" في ShareX لكل ملف مرفوع يفتح صفحة الحذف لدينا في متصفحك (أي delete_url الذي يُستخدم مرة واحدة للملف)، فيمكنك إزالة لقطة مباشرة من سجل ShareX. ويمكنك أيضاً حذف الملفات من حسابي. نزّلت ملف الإعداد قبل أكتوبر 2026؟ نزّله مرة أخرى للحصول على هذه الميزة.

Flameshot (Linux)

سكربت shell صغير يشغّل flameshot gui ويرفع اللقطة وينسخ الرابط إلى الحافظة. اربطه باختصار لوحة مفاتيح في بيئة سطح المكتب لديك بدلاً من الاختصار الافتراضي لـ Flameshot.

تنزيل yis-flameshot-upload.sh

# One-time setup
chmod +x yis-flameshot-upload.sh
export YIS_API_KEY="YOUR_API_KEY"   # or add to ~/.config/yourimageshare/api_key

# Then bind this to a hotkey instead of calling flameshot directly:
/path/to/yis-flameshot-upload.sh

Greenshot (Windows)

سكربت PowerShell لوجهة External command المدمجة في Greenshot. متوافق مع Windows PowerShell 5.1 المرفق مع Windows، دون حاجة إلى تثبيت إضافي.

تنزيل yis-greenshot-upload.ps1

# One-time setup
setx YIS_API_KEY "YOUR_API_KEY"

# In Greenshot: Preferences > Destinations > External command > Settings
#   Command:   powershell.exe
#   Arguments: -ExecutionPolicy Bypass -File "C:\path\to\yis-greenshot-upload.ps1" "%1"

إضافات المنتديات

أضف زر "رفع صورة" حقيقياً بجانب محرر المشاركات في منتداك. كل إضافة ترفع عبر نقطة /api نفسها الموثقة أعلاه وتُدرج BBCode عند المؤشر - دون تبويب منفصل ودون نسخ ولصق يدوي.

استخدم مفتاح الرفع فقط، وليس مفتاح API الكامل، في الإضافات أدناه. تعرض كل إضافة المفتاح في مصدر صفحة كل زائر، ومفتاح الرفع فقط (حسابي > تبويب API) يستطيع الرفع فقط - فلا يمكنه عرض ملفاتك المرفوعة أو حذفها حتى لو نسخه أحدهم من الصفحة.

عمليات الرفع من المنتديات خاصة افتراضياً: تعمل الصورة في المشاركة، لكن YourImageShare لا يمنحها صفحة خاصة بها (بدون تعليقات أو تفاعلات أو إعلانات). وفي كل إضافة إعداد للتحويل إلى unlisted إن أردت صفحة أيضاً لكل من لديه الرابط.

phpBB

امتداد phpBB 3.2/3.3 حقيقي. فك الضغط داخل ext/، وفعّله من Customise > Manage extensions، ثم استبدل YOUR_UPLOAD_ONLY_KEY في ملف أحداث القالب الخاص بالامتداد بمفتاح الرفع فقط الحقيقي لديك.

تنزيل لـ phpBB

SMF (Simple Machines Forum)

حزمة SMF حقيقية - ثبّتها من Admin > Package Manager، ثم استبدل YOUR_UPLOAD_ONLY_KEY في Sources/yis_forumupload.php بمفتاح الرفع فقط الحقيقي لديك.

تنزيل لـ SMF

MyBB

إضافة MyBB 1.8 حقيقية. انسخها إلى inc/plugins/، وفعّلها من Configuration > Plugins، ثم استبدل YOUR_UPLOAD_ONLY_KEY في ملف الإضافة بمفتاح الرفع فقط الحقيقي لديك.

تنزيل لـ MyBB

FluxBB وPunBB وZetaBoards

لا يملك هذا النوع نظام إضافات رسمياً، لذا هو مقطع صغير يُلصق مباشرة في القالب (FluxBB/PunBB) أو في لوحة الإدارة (ZetaBoards) - وهذه تعليمات النسخ واللصق الكاملة لكل منها:

تعليمات FluxBB تعليمات PunBB تعليمات ZetaBoards

إضافة WordPress

انقل مكتبة الوسائط إلى YourImageShare بدلاً من القرص المحلي. تمر عمليات رفع الصور/الفيديوهات الجديدة عبر نقطة /api نفسها الموثقة أعلاه تلقائياً، ويُحذف الملف المحلي (وكل حجم مصغّر مولَّد) بمجرد تأكيد الرفع، ويُحل كل رابط مرفق في WordPress - محرر الكتل والصور البارزة والمعارض وREST API - إلى الملف المستضاف على YourImageShare. بدون shortcode وبدون تغيير في طريقة عملك.

  • نقل مكتبة وسائط موجودة بالجملة في الخلفية (أو عبر wp yis offload --all)، وليس الملفات الجديدة فقط
  • تستمر الصور والفيديوهات الموجودة في المقالات بالعمل بعد إزالة ملفاتها المحلية
  • تستخدم الصور المصغّرة وsrcset صورتنا المصغرة بعرض 280px، فلا تحمّل أماكن الصور الصغيرة ملفات بالحجم الكامل
  • ملفات حتى 200MB، تُرسل على أجزاء فلا تُجهد الفيديوهات الكبيرة الاستضافة المشتركة
  • استعد أي ملف منقول إلى التخزين المحلي في أي وقت
  • عمود في مكتبة الوسائط يبيّن ما نُقل وما بقي محلياً
  • تُخزَّن الملفات المنقولة خاصة: تُحمَّل حيثما يستخدمها موقعك، لكن لا تحصل على صفحة خاصة بها على YourImageShare

تستخدم مفتاح الرفع فقط، وليس مفتاح API الكامل. مفتاح API الكامل الاختياري لا يلزم إلا إن أردت حذف الملفات المنقولة من YourImageShare عند حذفها في WordPress.

احصل عليها من WordPress.org تنزيل ملف ZIP

في WordPress: Plugins > Add New، ابحث عن YourImageShare Media Offload، ثم ثبّتها وفعّلها.

زر رفع لأي موقع

امنح زوارك زر "رفع" في أي موقع - نموذج تعليقات أو صفحة دعم أو منتدى لا نملك له إضافة أو موقع ثابت. الصق سطرين؛ بدون حساب وبدون شيفرة خادم.

<a class="yis-upload" href="https://yourimageshare.com/" data-target="#message" data-format="bbcode">Image and video hosting by YourImageShare</a>
<script src="https://yourimageshare.com/w.js" async></script>

كلا السمتين اختياريتان: بدونهما يعرض الزر الروابط مع زر نسخ. ويُبنى صندوق الرفع حول الرابط.

  • يتم الرفع داخل صفحتك مباشرة: انقر الزر، أو أفلت الملفات عليه، أو الصق لقطة شاشة فيه - عدة ملفات دفعة واحدة، مع شريط تقدم وصورة مصغرة
  • تُرفع كذلك الصور الملصقة أو المفلتة مباشرة في الحقل المحدد في data-target (أي textarea أو input أو مربع قابل للتحرير)، وتُضاف الروابط إلى ذلك الحقل؛ وبدون هدف تظهر تحت الزر مع زر نسخ
  • data-format: url (رابط الملف المباشر، وهو الافتراضي) أو page أو bbcode أو html أو markdown؛ وتغيّر data-label نص الزر
  • data-key (اختياري): مفتاح الرفع فقط لديك (حسابي > API). عندها تذهب الملفات المرفوعة إلى حسابك ضمن حدودك الخاصة. وبدون مفتاح تكون الملفات المرفوعة مجهولة وغير مدرجة، مع حد يومي لكل زائر ولكل موقع
  • يمكن للمطورين الاستماع إلى الحدث yis:upload على صندوق الرفع: يحمل event.detail.item القيمة {id, type, page, url, thumb}
  • ملفات حتى 95 MB عبر الزر (والأكبر في الموقع). تُطبَّق سياسات الإشراف والشروط لدينا كالمعتاد؛ ويحصل كل زائر على رابط حذف خاص به

يُرسم الزر في صندوق معزول خاص به، فلا يمكن لـ CSS موقعك إفساده. ويبقى الرابط الصغير "Image and video hosting by YourImageShare" ظاهراً داخل صندوق الرفع.

اختصار iPhone وiPad

ارفع من قائمة المشاركة في أي تطبيق - الصور أو الملفات أو Safari أو لقطة شاشة - واحصل على الرابط في الحافظة. بدون تثبيت تطبيق وبدون حساب.

لإنشائه بنفسك في تطبيق الاختصارات (في نحو دقيقتين):

  1. اختصار جديد، وسمّه "Upload to YourImageShare". في تفاصيله، فعّل Show in Share Sheet واقبل الصور والوسائط.
  2. أضف Get Contents of URL: الرابط https://yourimageshare.com/api/widget، والطريقة POST، وجسم الطلب Form بحقلين: uploads (File) = Shortcut Input، وclient (Text) = ios-shortcut.
  3. أضف Get Dictionary Value للمفتاح data، ثم آخر للمفتاح src - وهذا هو الرابط المباشر.
  4. أضف Copy to Clipboard وShow Notification ("Link copied").

بدون مفتاح تكون الملفات المرفوعة مجهولة وغير مدرجة، مع حد يومي. أضف ترويسة X-API-Key بمفتاح الرفع فقط لديك (حسابي > API) للرفع إلى حسابك. تتضمن الاستجابة أيضاً delete_url إن أردت الاحتفاظ برابط حذف.

PicGo وPicList

يرفع PicGo وPicList الصور الملصقة أو المسحوبة لمحررات Markdown - Typora وVS Code وObsidian وJoplin - ويضعان الرابط في نصك. تجعل إضافتنا YourImageShare أحد مواقع رفع الصور المتاحة لديهما.

  • في PicGo أو PicList: Plugins، ابحث عن yourimageshare، ثبّت، ثم اختر YourImageShare كأداة رفع. من سطر الأوامر: picgo install yourimageshare
  • أو نزّل الإضافة واستوردها كإضافة محلية (فك الضغط أولاً)
  • الإعدادات: مفتاح الرفع فقط (اختياري - فارغاً = رفع مجهول غير مدرج)، والظهور، وهل يُعاد رابط الصورة المباشر (لـ Markdown) أم رابط الصفحة
  • يظل الرابط الذي يعيده يعمل عندما تُحسَّن الصور الكبيرة لاحقاً إلى WebP

تنزيل إضافة PicGo

بوت Telegram

احصل على رابط لصورة أو فيديو أو GIF دون مغادرة Telegram. أرسله إلى @YourImageShare_bot ويعود الرابط مباشرة - بدون حساب وبدون مفتاح API. يرفع البوت عبر نقطة /api نفسها الموثقة أعلاه.

  • أرسل صورة أو فيديو أو GIF أو ملف صورة أو فيديو؛ ويعود ألبوم من حتى 10 عناصر في رد واحد
  • في المجموعات، ردّ بالأمر /link على صورة أو فيديو وسينشر البوت رابطه للجميع
  • يجعل /autodelete ملفاتك التالية تُحذف تلقائياً بعد ساعة أو يوم أو أسبوع أو 30 يوماً
  • لكل نتيجة زر حذف لا يعمل إلا لمن رفع الملف
  • الروابط غير مدرجة: لا يرى الملف إلا من لديه الرابط
  • يرد البوت بلغة Telegram لديك عندما يكون الموقع متاحاً بها

حافظ على الجودة الكاملة: يضغط Telegram الصور المرسلة بالطريقة العادية. أرسلها كملف (📎 → File) وستُرفع النسخة الأصلية. يسمح Telegram للبوتات بجلب ملفات حتى 20 MB، فارفع الملفات الأكبر من الموقع.

افتح @YourImageShare_bot في Telegram

بوت Discord

حوّل أي صورة أو GIF أو فيديو في Discord إلى رابط دائم. تتوقف روابط مرفقات Discord نفسها عن العمل بعد فترة؛ أما روابط YourImageShare فلا. بدون حساب وبدون مفتاح API. يرفع البوت عبر نقطة /api نفسها الموثقة أعلاه.

  • /upload مع ملف: حذف تلقائي اختياري بعد 1 أو 7 أو 30 يوماً، وonly_me لإظهار الرابط لك وحدك
  • انقر بزر الفأرة الأيمن على رسالة → Apps → Rehost on YourImageShare لإعادة استضافة ما يصل إلى 6 صور أو فيديوهات منها في رد واحد
  • أضفه إلى خادم، أو إلى حسابك الشخصي لاستخدامه في أي محادثة أو رسالة خاصة
  • لكل نتيجة زر حذف لا يعمل إلا لمن رفع الملف
  • الروابط غير مدرجة: لا يرى الملف إلا من لديه الرابط

أضف YourImageShare إلى Discord

GitHub Action لـ Playwright وCypress

عندما تفشل اختبارات end-to-end في طلب دمج، اعرف السبب دون تنزيل ملفات zip للمخرجات. ترفع الأداة لقطات شاشة الإخفاق والفروقات المرئية وتعرضها كصور في تعليق واحد على طلب الدمج، يُحدَّث عند كل تشغيل.

  • تعمل مع Playwright وCypress، وتكتشف بنفسها أيهما يستخدمه المشروع
  • تظهر المقارنات المرئية الفاشلة كـ Expected وActual وDiff، مع رابط إلى شريط مقارنة قبل/بعد (toHaveScreenshot في Playwright؛ وفي Cypress إضافتا cypress-image-diff-js وcypress-visual-regression)
  • يتحول التعليق إلى "all tests passed" بمجرد إصلاح الاختبارات؛ ويذهب التقرير نفسه إلى ملخص المهمة
  • لقطات الشاشة خاصة (ملفات صور فقط بدون صفحة) وتُحذف بعد 30 يوماً افتراضياً
  • يلزم مفتاح الرفع فقط كسرّ (secret) في المستودع باسم YOURIMAGESHARE_API_KEY؛ ولا تُفشل البناء أبداً
- uses: yourimageshare/playwright-pr-screenshots@v1
  if: always()
  with:
    api-key: ${{ secrets.YOURIMAGESHARE_API_KEY }}

دليل الإعداد على GitHub

مشاريع المجتمع

بعض أفضل تكاملات YourImageShare يبنيها من يستخدمونه. هذه المشاريع أنشأها أعضاء من المجتمع باستخدام API العام الموثق أعلاه. ويتولى أصحابها صيانتها، فللأسئلة أو تقارير الأخطاء تواصل مع المؤلف عبر صفحة المشروع.

  • YourImageShare Uploads for FlatBB - إضافة لمنتدى FlatBB من تطوير madromas (MadWay Inc.).
    • تضيف زر رفع إلى محرر المشاركات في FlatBB: اختر صورة أو فيديو أو أكثر ويُدرج Markdown عند المؤشر
    • تُدرج كل ملف مرفوع كصورة مصغرة قابلة للنقر أو صورة بالحجم الكامل أو رابط عادي (الفيديوهات كرابط)
    • تمر الملفات المرفوعة عبر خادم منتداك بمفتاح API للرفع فقط، فلا يصل المفتاح إلى متصفحات الزوار
    • تُستضاف الملفات على YourImageShare وليس على قرص منتداك، بظهور افتراضي تختاره (خاص أو غير مدرج أو عام)
    • تعمل جنباً إلى جنب مع أداة الرفع الخاصة بـ FlatBB، بحد مستقل لحجم الملف

    المصدر على GitHub · صفحة متجر FlatBB

شكراً لكم

شكراً جزيلاً لكل من يبني على YourImageShare ويشارك عمله مع الآخرين. تصل مشاريع المجتمع بـ YourImageShare إلى أماكن ما كنا لنبلغها بمفردنا. هل بنيت شيئاً باستخدام API؟ أخبرنا عنه ويسعدنا إضافته هنا.

من المدونة

مستعد للتجربة؟

احصل على مفتاح API ←