REST API
ارفع الملفات، أنشئ مجموعات، وادِر المشاركات عبر HTTP. جميع الردود بصيغة JSON؛ لا حاجة لمفتاح API للرفع المجهول.
مقدمة
توفر API الخاصة بـ storage.to الطاقة لـ CLI، تطبيق سطح المكتب، رافع الويب، وأي عميل طرف ثالث ترغب في بنائه.
تتكون عملية الرفع من ثلاث خطوات:
- التهيئة — أخبرنا أنك تريد رفع ملف. نُعيد رابطًا أو أكثر مسبق التوقيع يشير إلى Cloudflare R2.
- ارفع إلى R2 — :ضع بياناتك مباشرة إلى عنوان URL الموقع مسبقًا. البيانات لا تمر عبر خوادمنا.
- التأكيد — أخبرنا أن الرفع انتهى. ننشئ سجل
Fileونزودك برابط قابل للمشاركة.
الرابط الأساسي
https://storage.to/api
جميع نقاط النهاية أدناه نسبية لهذا الرابط الأساسي. مثال: POST /upload/init تعني POST https://storage.to/api/upload/init.
المصادقة
معظم نقاط النهاية لا تتطلب توثيقًا. الرفع المجهول هو ميزة أساسية.
المصادقة اختيارية وتفتح:
- الملفات المرفقة بحسابك (مرئية في /dashboard)
- ميزات مميزة (ملفات دائمة، تخزين أكبر)
- تعديلات قائمة على الملكية (حذف، تعيين كلمة مرور، تغيير انتهاء الصلاحية) بدون الحاجة لمطابقة رمز الزائر
نستخدم رموز حامل Laravel Sanctum. اصدر رمزًا عبر تسليم OAuth في سطح المكتب أو تسجيل الدخول عبر الويب، ثم أرسله كالتالي:
Authorization: Bearer <token>
رمز الزائر
يحتاج العملاء المجهولون إلى طريقة لإثبات ملكيتهم لملفاتهم المرفوعة بدون حساب. نستخدم رمز الزائر — سلسلة عشوائية ينشئها العميل مرة واحدة ويعيد استخدامها. أرسلها مع كل طلب:
X-Visitor-Token: <random-string>
على الويب، يُخزن الرمز تلقائيًا في ملف تعريف الارتباط visitor_token. يخزنه CLI في ~/.config/storageto/token (انظر وثائق CLI).
لنقاط النهاية الخاصة بالتعديلات (حذف، تعيين كلمة مرور، تغيير انتهاء الصلاحية)، يتم تأكيد الملكية إذا إما رمز الزائر يطابق أو الطلب يأتي من نفس عنوان IP الذي أنشأ الملف.
الأخطاء
تتبع الأخطاء نمطًا موحدًا:
{
"success": false,
"error": "Human-readable message"
}
رموز حالة HTTP الشائعة:
| الرمز | المعنى |
|---|---|
200 | تم بنجاح. |
201 | تم الإنشاء. |
400 | طلب غير صالح (مثلاً تجاوز حد حجم المجموعة). |
401 | كلمة المرور مطلوبة أو غير صحيحة. |
403 | غير مصرح (لست مالك المورد). |
404 | المورد غير موجود أو منتهي الصلاحية. |
422 | فشل التحقق، أو تقييد الخطة/الحصة. |
429 | تم الوصول إلى حد المعدل أو حصة الرفع. |
500 | خطأ في الخادم. تحقق من الحالة. |
حدود المعدل
جميع حدود المعدل لكل عنوان IP. استجابة 429 تتضمن رؤوس Retry-After و X-RateLimit-Limit و X-RateLimit-Remaining القياسية.
| النطاق | الحد |
|---|---|
| بدء التحميل / التأكيد / الإلغاء | 60 / دقيقة |
| إكمال التحميل متعدد الأجزاء | 500 / دقيقة |
| روابط أجزاء التحميل متعدد الأجزاء | 120 / دقيقة |
| بدء الدفعة / التأكيد | 500 / دقيقة |
| استطلاعات الحالة (ملف ومجموعة) | 120 / دقيقة |
| الإعدادات (كلمة المرور، انتهاء الصلاحية، الحد الأقصى للتحميلات) | 30 / دقيقة |
| التحقق من كلمة المرور | 10 / دقيقة |
| إنشاء مجموعة | 30 / دقيقة |
| الإدارة (جاهز، حذف) | 60 / دقيقة |
| رفع الصورة المصغرة | 120 / دقيقة |
| رفع عبر ShareX | 20 / يوم |
| تحليلات التطبيق / الأخطاء | 120 و 60 / دقيقة |
حصة الرفع: العملاء المجهولون لديهم حدان يعملان بالتوازي — 100 جيجابايت / 24 ساعة لكل رمز الزائر و 500 جيجابايت / 24 ساعة لكل IP (حد IP يلتقط حركة المرور بدون رمز والشبكات المشتركة). عند تجاوز أي منهما ستحصل على 429 مع التفاصيل. هذا هو حد رفع فقط — التنزيلات غير محدودة وغير مقيدة (تُقدم مباشرة من عناوين R2 الموقعة).
رفع
عملية الرفع ثلاثية الخطوات لأي ملف، بما في ذلك الملفات التي تزيد عن 5 جيجابايت (متعددة الأجزاء تلقائيًا). إذا كنت تحتاج فقط إلى رفع سريع على شكل لقطة شاشة، راجع ShareX بدلاً من ذلك.
/upload/init
60/min
ابدأ رفعًا. للملفات التي تزيد عن 50 ميجابايت، تتضمن الاستجابة part_urls لرفع متعدد الأجزاء؛ وإلا رابط واحد url.
محتوى الطلب
| الحقل | النوع | الوصف |
|---|---|---|
filename | string · required | اسم الملف الأصلي. الحد الأقصى 255 حرفًا. |
content_type | string · required | نوع MIME. |
size | integer · required | حجم الملف بالبايت. الحد الأدنى 1. |
/upload/parts
120/min
اطلب روابط أجزاء إضافية لرفع متعدد الأجزاء قيد التنفيذ. يُستخدم عندما يرجع /init روابط أقل من عدد الأجزاء لديك (أو انتهت صلاحيتها).
محتوى الطلب
| الحقل | النوع | الوصف |
|---|---|---|
upload_id | string · required | upload_id من /init. |
part_numbers | array<int> · required | أرقام الأجزاء للحصول على روابط لها. |
/upload/complete-multipart
500/min
إنهاء رفع متعدد الأجزاء على R2 بمجرد رفع جميع الأجزاء.
محتوى الطلب
| الحقل | النوع | الوصف |
|---|---|---|
upload_id | string · required | upload_id من /init. |
parts | array · required | كل إدخال: { partNumber, etag } من استجابة R2. |
/upload/abort
60/min
إلغاء رفع متعدد الأجزاء وتنظيف أي بيانات جزئية على R2.
محتوى الطلب
| الحقل | النوع | الوصف |
|---|---|---|
upload_id | string · required | الرفع الذي سيتم إلغاؤه. |
/upload/confirm
60/min
تأكيد اكتمال الرفع. عندها نقوم بإنشاء سجل File وإرجاع الرابط القابل للمشاركة.
محتوى الطلب
| الحقل | النوع | الوصف |
|---|---|---|
filename | string · required | اسم الملف الأصلي. |
size | integer · required | حجم الملف بالبايت. |
content_type | string · required | نوع MIME. |
r2_key | string · required | r2_key من /init. |
collection_id | string · optional | الإرفاق بمجموعة. |
crc32 | integer · optional | مجموع تحقق CRC32 للتحقق من السلامة. |
file_id | string(9) · optional | إتمام ملف معرفه محجوز سابقًا. |
/file/reserve
60/min
احجز معرف ملف ورابط قابل للمشاركة قبل جاهزية البيانات. مفيد عندما تحتاج إلى إعطاء رابط أولاً وإتمام الرفع لاحقًا. الملكية مرتبطة برمز الزائر + IP الخاص بك. أكمل الرفع لاحقًا باستخدام /upload/init + /upload/confirm، مع تمرير file_id للتأكيد.
محتوى الطلب
| الحقل | النوع | الوصف |
|---|---|---|
filename | string · optional | اسم ملف نائب. الافتراضي هو "Pending". |
content_type | string · optional | نوع MIME نائب. |
/upload/init-batch
500/min
معادل الدُفعة لـ /upload/init، مُحسّن لواجهة الويب للتحميل. يبدأ حتى 250 ملفًا في جولة واحدة.
يُستخدم داخليًا بواسطة واجهة الويب للتحميل. يفضل معظم العملاء استخدام /upload/init لملف واحد.
/upload/confirm-batch
500/min
معادل الدُفعة لـ /upload/confirm. يؤكد العديد من الملفات في جولة واحدة.
المجموعات
المجموعة تجمع عدة ملفات تحت رابط مشاركة واحد (/c/{id}). حتى 10,000 ملف و25 جيجابايت إجمالاً.
/collection
30/min
أنشئ مجموعة جديدة. أرفق الملفات لاحقًا بتمرير collection_id على /upload/confirm.
محتوى الطلب
| الحقل | النوع | الوصف |
|---|---|---|
expected_file_count | integer · optional | تلميح لوضع علامة تلقائية على المجموعة بأنها جاهزة بمجرد تأكيد جميع الملفات المتوقعة. |
/collection/{id}/status
120/min
استعلم عن حالة المجموعة. كما يضع علامة تلقائية على المجموعة بأنها جاهزة إذا تم تأكيد جميع الملفات المتوقعة.
/collection/{id}/ready
Owner only
60/min
وضع علامة على المجموعة بأنها جاهزة للتحميل. عادةً غير مطلوب — المجموعات تصبح جاهزة تلقائيًا عند الوصول إلى expected_file_count.
/collection/{id}
Owner only
60/min
احذف مجموعة وجميع ملفاتها.
/collection/{id}/password
Owner only
30/min
اضبط كلمة مرور على المجموعة. يتطلب من 4 إلى 100 حرف.
محتوى الطلب
| الحقل | النوع | الوصف |
|---|---|---|
password | string · required | من 4 إلى 100 حرف. |
/collection/{id}/password
Owner only
30/min
أزل كلمة المرور من المجموعة.
/collection/{id}/verify-password
10/min
تحقق من كلمة المرور. يعيد 200 عند النجاح، و401 عند كلمة مرور غير صحيحة.
محتوى الطلب
| الحقل | النوع | الوصف |
|---|---|---|
password | string · required |
/collection/{id}/expiry
Owner only
30/min
غيّر انتهاء صلاحية المجموعة.
محتوى الطلب
| الحقل | النوع | الوصف |
|---|---|---|
days | integer · optional | من 1 إلى 7 أيام من الآن. اتركها فارغة أو استخدم null للمدة الدائمة (للمميزين فقط). |
/collection/{id}/max-downloads
Owner only
30/min
حدد حدًا للتحميل (حذف بعد N تحميلات). تُحذف المجموعة تلقائيًا عند الوصول للحد.
محتوى الطلب
| الحقل | النوع | الوصف |
|---|---|---|
max_downloads | integer · optional | من 1 إلى 1000. يجب أن يتجاوز عدد التنزيلات الحالي. استخدم null لإزالة الحد. |
الملفات
جميع إعدادات الملف (كلمة المرور، الانتهاء، الحد الأقصى للتحميلات) تعكس نقاط نهاية المجموعة. مخصصة للمالك فقط.
/file/{id}/status
120/min
تحقق مما إذا كان الملف لا يزال في انتظار التحميل.
/file/{id}
Owner only
60/min
احذف ملفًا فورًا.
/file/{id}/thumbnail
Owner only
120/min
حمّل صورة مصغرة لفيديو أو ملف صورة (تُستخدم في صفحة التنزيل). الحد الأقصى 2 ميجابايت.
محتوى الطلب
| الحقل | النوع | الوصف |
|---|---|---|
thumbnail | image · required | تحميل متعدد الأجزاء. الحد الأقصى 2 ميجابايت. |
/file/{id}/password
Owner only
30/min
اضبط كلمة مرور على ملف. يتطلب من 4 إلى 100 حرف.
/file/{id}/password
Owner only
30/min
أزل كلمة مرور الملف.
/file/{id}/verify-password
10/min
تحقق من كلمة مرور الملف.
/file/{id}/expiry
Owner only
30/min
غيّر انتهاء صلاحية الملف.
محتوى الطلب
| الحقل | النوع | الوصف |
|---|---|---|
days | integer · optional | من 1 إلى 7 أيام من الآن. اتركها فارغة أو استخدم null للمدة الدائمة (للمميزين فقط). |
/file/{id}/max-downloads
Owner only
30/min
حدد حدًا إجماليًا لتحميلات الملف. يُحذف تلقائيًا عند الوصول.
رفع عبر ShareX
نقطة تحميل لمرة واحدة — أرسل ملفًا متعدد الأجزاء، واحصل على رابط قابل للمشاركة فورًا. لا حاجة لخطوات بدء/تأكيد. مثالي لأدوات لقطة الشاشة. دليل الإعداد الكامل على /ar/docs/sharex.
مصادقة سطح المكتب
للعملاء الموثقين (مثل تطبيق سطح المكتب) الذين يحملون رمز Sanctum.
/user
Bearer token
إرجاع المستخدم الموثق.
/auth/logout
Bearer token
إلغاء رمز الوصول الحالي.
متفرقات
/health
فحص الحالة. يتحقق من قاعدة البيانات، تخزين R2، وذاكرة Redis المؤقتة. يعيد 200 إذا كان كل شيء جيدًا، و503 خلاف ذلك.
/activity
تدفق نشاط مباشر لرمز الكرة في الصفحة الرئيسية. مخزن مؤقت على حافة Cloudflare.
/bandwidth/status
60/min
استخدام حصة التحميل الحالية للمتصل — يستخدمه CLI وتطبيق سطح المكتب لعرض السعة المتبقية. شكل الاستجابة يختلف للمستخدمين الموثقين. رغم اسم الرابط، هذا يتتبع فقط رفع بايت؛ التنزيلات غير محسوبة.
/app-analytics
120/min
أرسل حدث استخدام من واجهة الأوامر أو تطبيق سطح المكتب.
محتوى الطلب
| الحقل | النوع | الوصف |
|---|---|---|
app | string · required | desktop، cli، أو web. |
version | string · optional | إصدار العميل. |
event | string · required | اسم الحدث، مثلاً upload_complete. |
context | object · optional | بيانات وصفية إضافية. |
/app-errors
60/min
أرسل تقرير خطأ من واجهة الأوامر أو تطبيق سطح المكتب. يتم إزالة التكرار على الخادم — بحد أقصى 10 من نفس الخطأ في الساعة.
محتوى الطلب
| الحقل | النوع | الوصف |
|---|---|---|
app | string · required | desktop، cli، أو web. |
type | string · required | فئة/نوع الخطأ. |
message | string · required | رسالة الخطأ. |
stack | string · optional | تتبع المكدس. |
version, os, os_version, arch, context | various · optional | بيانات وصفية تشخيصية. |