تخطي إلى المحتوى

دليل المطوّرين

أرسل المنشورات إلى Amaposta من مسار المحتوى الخاص بك: ارفع الوسائط، وأنشئ منشورًا لكل قناة، وجدوله، وتلقَّ إشعارًا عند نشره.

المصادقة

أنشئ مفتاح API في لوحة التحكم ضمن الإعدادات، ثم API والويب هوك. تبدأ المفاتيح بـ ss_live_، وتنتمي إلى مساحة عمل واحدة، ويمكن تقييدها بمشاريع معينة. أرسل المفتاح كرمز حامل في كل طلب:

التحقق من مفتاح
curl https://www.amaposta.com/api/v1/me \
  -H "Authorization: Bearer ss_live_…"

تُبيّن الاستجابة اسم المفتاح ونطاقات صلاحياته ومساحة العمل. لكل مفتاح نطاق صلاحيات واحد أو أكثر:

نطاق الصلاحياتيتيح
content:readقراءة المشاريع والقنوات والمنشورات والوسائط.
content:writeرفع الوسائط وإنشاء المنشورات أو تعديلها.
posts:publishالجدولة والنشر دون مراجعة. بدونه، تُرسل المنشورات إلى صندوق المراجعة في المشاريع التي تستخدم الموافقات، وتبقى مسودات في سائر المشاريع.

يمكن لكل مفتاح إجراء 120 طلبًا في الدقيقة. بعد ذلك تحصل على 429 مع الرمز rate_limited؛ انتظر قليلًا وحاول مجددًا.

المشاريع والقنوات

تنتمي المنشورات إلى مشروع. اعرض قائمة المشاريع المتاحة لمفتاحك، ثم قنوات أحدها. ستحتاج إلى معرّف القناة لاستهدافها أو لتخصيص نصها.

سرد المشاريع والقنوات
curl https://www.amaposta.com/api/v1/projects \
  -H "Authorization: Bearer $AMAPOSTA_KEY"

curl https://www.amaposta.com/api/v1/projects/$PROJECT_ID/channels \
  -H "Authorization: Bearer $AMAPOSTA_KEY"

تتضمن القناة provider ‏(youtube أو instagram أو tiktok أو x أو facebook أو custom أو sandbox)، وstatus ‏(active أو expiring أو needs_reconnect أو error أو disabled)، وأنواع المنشورات التي supports.

رفع الوسائط

تُرفع الصور والفيديوهات مرة واحدة لكل مشروع، ويمكن استخدامها في أي عدد من المنشورات. توجد ثلاث طرق لإدخالها.

الرفع المباشر

أرسل الملف كبيانات نموذج متعددة الأجزاء في حقل باسم file. الأنسب للملفات التي لا تتجاوز بضع مئات من الميغابايت.

POST /api/v1/projects/{project_id}/media
curl https://www.amaposta.com/api/v1/projects/$PROJECT_ID/media \
  -H "Authorization: Bearer $AMAPOSTA_KEY" \
  -F "[email protected]"

رفع موقّع مسبقًا للملفات الكبيرة

اطلب عنوان URL للرفع، وأرسل البايتات مباشرةً إلى التخزين باستخدام PUT، ثم أبلغ Amaposta باكتمال الرفع.

ثلاثة طلبات
# 1. Ask for an upload URL. The response is {"media": { … }, "upload_url": "…"}
curl https://www.amaposta.com/api/v1/projects/$PROJECT_ID/media/uploads \
  -H "Authorization: Bearer $AMAPOSTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"filename": "batch-142.mp4", "content_type": "video/mp4", "size_bytes": 48213844}'

# 2. Upload the bytes to upload_url
curl -X PUT "$UPLOAD_URL" \
  -H "Content-Type: video/mp4" \
  --upload-file batch-142.mp4

# 3. Finish the upload
curl -X POST https://www.amaposta.com/api/v1/media/$MEDIA_ID/complete \
  -H "Authorization: Bearer $AMAPOSTA_KEY"

الاستيراد من رابط

زوّد Amaposta برابط عام لتنزيل الملف في الخلفية. يمكنك أيضًا تخطي هذه الخطوة وتمرير media_url عند إنشاء المنشور.

POST /api/v1/projects/{project_id}/media/import
curl https://www.amaposta.com/api/v1/projects/$PROJECT_ID/media/import \
  -H "Authorization: Bearer $AMAPOSTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://cdn.example.com/batch-142.mp4"}'

تعيد كل عملية رفع كائن وسائط. تنتقل قيمة status من pending إلى processing ثم ready (أو failed مع error). بعد المعالجة، يتضمن الكائن width وheight وduration_ms وصورة مصغرة. استعلم دوريًا عبر GET /api/v1/media/{id} أو استمع إلى ويب هوك media.ready. تكون قيمة url المُرجعة موقّعة وصالحة لمدة 12 ساعة.

إنشاء منشور

ينشئ POST /api/v1/projects/{project_id}/posts منشورًا واحدًا مع عملية نشر لكل قناة. تكيّفه Amaposta لكل منصة: تُرسل العناوين فقط حيث يوجد حقل عنوان، وتتحول الوسوم إلى علامات على YouTube وإلى نص مضمّن في غيره.

إنشاء منشور فيديو وإضافته إلى قائمة الانتظار
curl https://www.amaposta.com/api/v1/projects/$PROJECT_ID/posts \
  -H "Authorization: Bearer $AMAPOSTA_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: episode-142" \
  -d @- <<'JSON'
{
  "kind": "video",
  "title": "How we roast a batch in 12 minutes",
  "description": "From green beans to first crack. We filmed one batch start to finish.",
  "hashtags": ["coffee", "behindthescenes"],
  "media_url": "https://cdn.example.com/batch-142.mp4",
  "cover_url": "https://cdn.example.com/batch-142-cover.jpg",
  "overrides": {
    "<x-channel-id>": {
      "description": "Batch 142 is out: green beans to first crack in 12 minutes."
    },
    "<youtube-channel-id>": {
      "options": { "privacy": "unlisted" }
    }
  },
  "schedule": { "mode": "queue" },
  "external_ref": "episode-142",
  "metadata": {
    "pipeline": { "name": "nightly-cut", "run": "2026-10-17" }
  }
}
JSON

الحقول

الحقلوظيفته
kindtext أو image أو video. مطلوب.
titleتستخدمه المنصات التي تتضمن حقل عنوان: YouTube ومنشورات الصور على TikTok وفيديوهات Facebook.
descriptionالتعليق أو الوصف أو نص المنشور. يُقبل أيضًا باسم body أو caption أو text.
hashtagsقائمة، مع # أو دونها.
media_id, media_urlمعرّف وسائط مرفوعة، أو رابط عام تنزّل Amaposta محتواه نيابةً عنك. مطلوب لمنشورات الصور والفيديو.
cover_media_id, cover_urlصورة غلاف للفيديو، حيث تدعمها المنصة.
channelsمعرّفات القنوات التي تريد النشر عليها. احذفه لاستخدام جميع القنوات النشطة في المشروع التي تدعم هذا النوع من المنشورات.
overridesتعديلات خاصة بكل قناة، مفاتيحها معرّفات القنوات: title وdescription وhashtags وoptions الخاصة بالمنصة، مثل privacy في YouTube.
scheduleتكون قيمة mode هي at (مع at بصيغة ISO 8601)، أو now، أو queue لموعد النشر المتاح التالي. احذفه لإنشاء مسودة.
external_refمرجعك الخاص، يُعاد في المنشور وعمليات النشر على Custom API.
metadataبيانات JSON حرة تُخزّن مع المنشور. أدرج "pipeline" لتمييز المحتوى المولّد؛ تعرضه لوحة التحكم وتُبلغ الويب هوك عن المصدر بالقيمة pipeline.

الاستجابة هي المنشور، ويتضمن إدخالًا واحدًا في deliveries لكل قناة.

إعادة المحاولة بأمان

قد تفقد الشبكات طلبات. أرسل ترويسة Idempotency-Key عند إنشاء منشور؛ فتُرجع إعادة المحاولة بالمفتاح نفسه منشور المحاولة الأولى بدلًا من إنشاء منشور ثانٍ. استخدم قيمة ثابتة من جانبك، مثل معرّف مهمة أو حلقة. تُقتطع المفاتيح عند 200 حرف.

الجدولة والنشر

جدول مسودة، أو انشرها الآن، أو أضفها إلى قائمة الانتظار، أو أزلها من التقويم باستخدام POST /api/v1/posts/{post_id}/schedule.

الجدولة لوقت محدد
curl https://www.amaposta.com/api/v1/posts/$POST_ID/schedule \
  -H "Authorization: Bearer $AMAPOSTA_KEY" \
  -H "Content-Type: application/json" \
  -d '{"mode": "at", "at": "2026-10-20T07:00:00Z"}'
  • atينشر في الوقت المحدد، حتى سنتين مقدمًا.
  • nowينشر فورًا.
  • queueيختار موعد النشر المتاح التالي لقنوات المنشور خلال الأسابيع الـ 12 المقبلة.
  • unscheduleيعيد المنشور إلى المسودات.

قبل جدولة أي شيء، تُجرى الفحوصات نفسها المستخدمة في المحرّر. إذا فشل أحدها، يُرجع الطلب 400 مع رسالة مثل أصلح هذا قبل الجدولة: يحتاج YouTube إلى عنوان. تتطلب الجدولة نطاق الصلاحيات posts:publish، أو مشروعًا مفعّلًا فيه نظام الموافقات، وحينها ينتظر المنشور في صندوق المراجعة.

قراءة المنشورات وعمليات النشر

اعرض منشورات مشروع، مع التصفية حسب status (حالات مفصولة بفواصل، أو inbox أو queue أو history)، وفترة from/to، وlimit وoffset. تكون الاستجابة {"items": […], "total": n}.

المنشورات المقبلة، وتفاصيل منشور واحد
curl "https://www.amaposta.com/api/v1/projects/$PROJECT_ID/posts?status=queue" \
  -H "Authorization: Bearer $AMAPOSTA_KEY"

curl https://www.amaposta.com/api/v1/posts/$POST_ID \
  -H "Authorization: Bearer $AMAPOSTA_KEY"

للمنشور status إجمالية (draft أو in_review أو changes_requested أو ready أو scheduled أو publishing أو published أو partial أو failed)، وعملية نشر واحدة لكل قناة:

deliveries[]
"deliveries": [
  {
    "id": "0192b7d4-…",
    "channel_id": "0192b7a1-…",
    "status": "published",
    "url": "https://www.youtube.com/watch?v=…",
    "error": null,
    "published_at": "2026-10-20T07:00:41Z"
  },
  {
    "id": "0192b7d4-…",
    "channel_id": "0192b7a9-…",
    "status": "failed",
    "url": null,
    "error": {
      "code": "endpoint_unavailable",
      "message": "Your endpoint returned 503 Service Unavailable",
      "hint": "Amaposta will retry with backoff."
    },
    "published_at": null
  }
]

حالات عمليات النشر هي pending وscheduled وpublishing وprocessing وpublished وfailed وcancelled. يزيل DELETE /api/v1/posts/{post_id} منشورًا.

الأخطاء

لكل خطأ البنية نفسها: كائن error يتضمن code ثابتًا، وmessage يمكنك عرضها للمستخدمين، وأحيانًا fields (رسائل لكل حقل) وhint.

422 Unprocessable Entity
{
  "error": {
    "code": "validation",
    "message": "Please fix the highlighted fields.",
    "fields": {
      "kind": "Use text, image or video."
    }
  }
}
الحالةالرمزالمعنى
400bad_requestلا يمكن تنفيذ الطلب كما طُلب، مثل جدولة منشور لا يجتاز فحوصاته.
401unauthorizedمفتاح API مفقود أو خاطئ أو ملغى.
402plan_limitلا تسمح خطة مساحة العمل بهذا؛ وتُبيّن limit الحد المعني.
403forbiddenيفتقر المفتاح إلى نطاق صلاحيات أو إلى إمكانية الوصول إلى المشروع.
404not_foundلا يوجد مشروع أو منشور أو وسائط أو نقطة نهاية كهذه.
409conflictيتعارض التغيير مع الحالة الحالية، مثل تعديل منشور يجري نشره بالفعل.
422validationيحتاج حقل واحد أو أكثر إلى إصلاح؛ راجع fields.
429rate_limitedأكثر من 120 طلبًا في الدقيقة باستخدام هذا المفتاح.
502provider_errorرفضت منصة الطلب أو أخفقت؛ وتُبيّن hint ما ينبغي فعله.

الويب هوك

أضف نقطة نهاية من الإعدادات، ثم API والويب هوك، واختر الأحداث المطلوبة وانسخ سر توقيعها. ترسل Amaposta بيانات JSON بطلب POST إلى عنوانك لكل حدث. تُعاد المحاولة بفواصل متزايدة عند أي استجابة غير 2xx، أو عدم الرد خلال 15 ثانية. وتُعطّل نقاط النهاية التي يستمر فشلها مع إشعار المسؤولين.

الحدثيُرسل عند
post.createdأُنشئ منشور (من لوحة التحكم أو API)
post.scheduledجُدول منشور
post.approvedتمت الموافقة على منشور
post.publishedنُشر منشور على قناة
post.failedفشل نشر منشور على قناة
channel.connectedرُبطت قناة أو أُعيد ربطها
channel.disconnectedفقدت قناة اتصالها
media.readyاكتملت معالجة ملف مرفوع
media.failedتعذّرت معالجة ملف مرفوع
post.published
POST /your/webhook HTTP/1.1
Content-Type: application/json
User-Agent: Amaposta-Webhooks/1.0
X-Amaposta-Event: post.published
X-Amaposta-Event-Id: 0192b7e0-…
X-Amaposta-Signature: t=1792479641,v1=5f2b0c…

{
  "id": "0192b7e0-…",
  "type": "post.published",
  "created_at": "2026-10-20T07:00:41Z",
  "project_id": "0192a3f1-…",
  "data": {
    "post_id": "0192b7c8-…",
    "delivery_id": "0192b7d4-…",
    "channel_id": "0192b7a1-…",
    "provider": "youtube",
    "external_id": "…",
    "url": "https://www.youtube.com/watch?v=…"
  }
}

التحقق من التوقيع

تكون X-Amaposta-Signature بالقيمة t=<unix seconds>,v1=<hex>، حيث v1 هي HMAC_SHA256(secret, t + "." + body) على جسم الطلب الخام. احسبها بنفسك، وقارنها بزمن ثابت، وارفض الطوابع الزمنية القديمة لمنع هجمات إعادة الإرسال.

Node.js
import crypto from "node:crypto";

// rawBody: the request body exactly as received (string or Buffer).
export function verifySignature(rawBody, header, secret, toleranceSeconds = 300) {
  const parts = Object.fromEntries(header.split(",").map((p) => p.split("=", 2)));
  const t = Number(parts.t);
  if (!t || Math.abs(Date.now() / 1000 - t) > toleranceSeconds) return false;
  const expected = crypto
    .createHmac("sha256", secret)
    .update(`${t}.${rawBody}`)
    .digest();
  const given = Buffer.from(parts.v1 ?? "", "hex");
  return given.length === expected.length && crypto.timingSafeEqual(given, expected);
}
Python
import hashlib
import hmac
import time


def verify_signature(raw_body: bytes, header: str, secret: str, tolerance: int = 300) -> bool:
    parts = dict(p.split("=", 1) for p in header.split(","))
    t = int(parts.get("t", "0"))
    if abs(time.time() - t) > tolerance:
        return False
    expected = hmac.new(secret.encode(), f"{t}.".encode() + raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, parts.get("v1", ""))

قنوات Custom API

تنشر قناة Custom API إلى نقطة نهاية HTTPS تشغّلها أنت: نظام إدارة المحتوى أو أداة نشرة بريدية أو منصة لا تدعمها Amaposta بعد. تظهر في التقويم وتخضع للفحوصات والموافقات وإعادة المحاولة كسائر القنوات. عند نشر منشور، ترسل Amaposta طلب POST واحدًا لكل عملية نشر:

ما تستقبله نقطة النهاية لديك
POST /amaposta/publish HTTP/1.1
Authorization: Bearer <your API key>
Content-Type: application/json
Idempotency-Key: 0192b7d4-…
X-Amaposta-Delivery: 0192b7d4-…
X-Amaposta-Signature: t=1792479600,v1=9ac41e…

{
  "id": "0192b7d4-…",
  "type": "post.publish",
  "created_at": "2026-10-20T07:00:00Z",
  "content": {
    "kind": "video",
    "title": "How we roast a batch in 12 minutes",
    "text": "From green beans to first crack. We filmed one batch start to finish.",
    "hashtags": ["coffee", "behindthescenes"],
    "media": {
      "url": "https://…",
      "content_type": "video/mp4",
      "size_bytes": 48213844,
      "width": 1080,
      "height": 1920,
      "duration_ms": 58000,
      "filename": "batch-142.mp4"
    },
    "cover": null,
    "options": {}
  },
  "post": {
    "id": "0192b7c8-…",
    "external_ref": "episode-142",
    "scheduled_at": "2026-10-20T07:00:00Z",
    "metadata": {
      "pipeline": { "name": "nightly-cut" }
    }
  },
  "project": { "id": "0192a3f1-…", "name": "Spring launch" },
  "channel": { "id": "0192b7a9-…", "name": "api.example.com" }
}

كيفية الرد

  • 2xxتم النشر. يمكنك اختياريًا إرجاع {"id": "…", "url": "…"} ليظهر الرابط في المنشور.
  • 401, 403رُفض المفتاح. تُعلّم القناة بأنها تحتاج إلى إعادة ربط ويُبلّغ المسؤولون. لا تستخدم هذه الرموز للتوقيع غير الصحيح.
  • 5xx, 408, 429مؤقت. تعيد Amaposta المحاولة بفواصل متزايدة.
  • رموز 4xx الأخرىيُعلّم المنشور بأنه فاشل مع رسالتك، ويمكن لشخص إصلاحه والضغط على «إعادة المحاولة».
جهة مستقبلة باستخدام Express
app.post("/amaposta/publish", express.raw({ type: "application/json" }), async (req, res) => {
  const signature = req.get("X-Amaposta-Signature") ?? "";
  if (!verifySignature(req.body, signature, process.env.AMAPOSTA_SIGNING_SECRET)) {
    return res.status(400).json({ message: "Bad signature" });
  }
  const delivery = JSON.parse(req.body);
  const item = await publishToYourSystem(delivery.content, req.get("Idempotency-Key"));
  res.json({ id: item.id, url: item.url });
});

يجب أن تكون نقطة النهاية متاحة من الإنترنت؛ لا تُتّبع عمليات إعادة التوجيه. عند ربط القناة، تفحصها Amaposta بطلب GET إلى عنوان فحص الحالة إن عيّنته، أو بطلب OPTIONS إلى نقطة النهاية.

قنوات Sandbox

تتصرف قناة Sandbox كقناة حقيقية، لكن لا يغادر أي شيء Amaposta. استخدمها لبناء تكاملك واختباره من البداية إلى النهاية: تُجدول المنشورات، وتظهر على الهواء، وتُنشَر أو تفشل، وتطلق أحداث الويب هوك نفسها. قنوات Sandbox مجانية في كل الخطط ولا تُحتسب ضمن حدود القنوات.

اختر سلوكها عند إضافتها:

  • النجاح دائمًايُنشَر كل منشور.
  • الفشل من حين لآخرشاهد الإخفاقات وإعادة المحاولات دون انتظار عطل حقيقي.
  • الفشل دائمًااختبر معالجة post.failed لديك.
  • اتصال منتهي الصلاحيةشاهد كيف تبدو تنبيهات إعادة الربط وروابطها عند انتهاء صلاحية الوصول.

قواعد المنصات

ما يقبله كل نوع من القنوات. تستخدم الفحوصات الحدود نفسها، لذا تظهر أغلب المشكلات قبل جدولة المنشور بدلًا من ظهورها عند نشره.

المنصة منشور العنوان نص الوسوم الوسائط
YouTube فيديو العنوانمطلوب؛ الحد الأقصى للأحرف: ١٠٠ الوصفالحد الأقصى للأحرف: ٥٬٠٠٠ تُرسل كعلامات، بحد أقصى 60 MP4, MOV, WebM, AVI, MKV; حتى ٢٥٦ GB; من ١ ث إلى ١٢ س
يمكن للحسابات التي لم تؤكّد رقم هاتف رفع فيديوهات بمدة حتى 15 دقيقة، ولا يمكنها تعيين صور مصغرة مخصصة. تستهلك كل عملية رفع من حصة API؛ وتتيح حصة Google الافتراضية نحو ست عمليات رفع يوميًا لكل تطبيق.
Instagram صورة بلا عنوان التعليقالحد الأقصى للأحرف: ٢٬٢٠٠ تُضاف إلى النص، بحد أقصى 30 JPEG; حتى ٨ MB
فيديو بلا عنوان التعليقالحد الأقصى للأحرف: ٢٬٢٠٠ تُضاف إلى النص، بحد أقصى 30 MP4, MOV; حتى ٣٠٠ MB; من ٣ ث إلى ١٥ د
يتطلب حساب Instagram من نوع Business أو Creator. يسمح Instagram لكل حساب بنشر 50 منشورًا عبر API خلال أي فترة متحركة من 24 ساعة. لا يمكن نشر منشورات نصية فقط على Instagram.
TikTok صورة العنوانالحد الأقصى للأحرف: ٩٠ الوصفالحد الأقصى للأحرف: ٤٬٠٠٠ تُضاف إلى النص JPEG, WebP; حتى ٢٠ MB
فيديو بلا عنوان التعليقالحد الأقصى للأحرف: ٢٬٢٠٠ تُضاف إلى النص MP4, MOV, WebM; حتى ٤ GB; من ٣ ث إلى ١٠ د
لا يرى منشورات التطبيقات التي لم تكمل تدقيق TikTok إلا منشئها. يختار TikTok الغلاف من إطار في الفيديو؛ ولا يدعم صور الغلاف المخصصة. لا يمكن نشر منشورات نصية فقط على TikTok.
X نص بلا عنوان منشورمطلوب، حتى ٢٨٠ (الرابط 23 حرفًا، والرمز التعبيري حرفان) تُضاف إلى النص لا شيء
صورة بلا عنوان منشورحتى ٢٨٠ (الرابط 23 حرفًا، والرمز التعبيري حرفان) تُضاف إلى النص JPEG, PNG, WebP, GIF; حتى ٥ MB
فيديو بلا عنوان منشورحتى ٢٨٠ (الرابط 23 حرفًا، والرمز التعبيري حرفان) تُضاف إلى النص MP4, MOV; حتى ٥١٢ MB; من ٠٫٥ ث إلى ٢:٢٠ د
عند استخدام تطبيق المطوّر الخاص بك على X، تستهلك المنشورات رصيد API الخاص به وفق نظام الدفع حسب الاستخدام. تُحتسب الوسوم ضمن حد الأحرف.
Facebook نص بلا عنوان منشورمطلوب؛ الحد الأقصى للأحرف: ٦٣٬٢٠٦ تُضاف إلى النص لا شيء
صورة بلا عنوان التعليقالحد الأقصى للأحرف: ٦٣٬٢٠٦ تُضاف إلى النص JPEG, PNG, GIF, WebP; حتى ١٠ MB
فيديو العنوانالحد الأقصى للأحرف: ٢٥٥ الوصفالحد الأقصى للأحرف: ٦٣٬٢٠٦ تُضاف إلى النص MP4, MOV; حتى ١ GB; من ١ ث إلى ٢٠ د
ينشر على الصفحات فقط؛ لا يمكن النشر على الملفات الشخصية عبر API.
Custom API نص العنوانبلا حد للطول الوصفبلا حد للطول تُرسل كعلامات لا شيء
صورة العنوانبلا حد للطول الوصفبلا حد للطول تُرسل كعلامات JPEG, PNG, WebP, GIF
فيديو العنوانبلا حد للطول الوصفبلا حد للطول تُرسل كعلامات MP4, MOV, WebM
يُوقّع كل طلب بترويسة HMAC-SHA256 لتتمكن من التحقق من وروده من Amaposta. أجب برمز 2xx وبيانات JSON اختيارية {"id": "…", "url": "…"}. تُعاد محاولات استجابات 408 و429 و5xx بفواصل متزايدة؛ وتُعلّم 401/403 القناة بأنها تحتاج إلى إعادة ربط؛ وتفشل رموز 4xx الأخرى عملية النشر لتتمكن من إصلاحها وإعادة المحاولة.
Sandbox نص العنوانالحد الأقصى للأحرف: ٢٠٠ الوصفالحد الأقصى للأحرف: ٥٬٠٠٠ تُضاف إلى النص، بحد أقصى 30 لا شيء
صورة العنوانالحد الأقصى للأحرف: ٢٠٠ الوصفالحد الأقصى للأحرف: ٥٬٠٠٠ تُضاف إلى النص، بحد أقصى 30 JPEG, PNG, WebP, GIF
فيديو العنوانالحد الأقصى للأحرف: ٢٠٠ الوصفالحد الأقصى للأحرف: ٥٬٠٠٠ تُضاف إلى النص، بحد أقصى 30 MP4, MOV, WebM
يستغرق النشر لحظات لتتمكن من متابعة تغير الحالة مباشرةً.