المصادقة
أنشئ مفتاح 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. الأنسب للملفات التي لا تتجاوز بضع مئات من الميغابايت.
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 عند إنشاء المنشور.
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
الحقول
| الحقل | وظيفته |
|---|---|
kind | text أو 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": [
{
"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.
{
"error": {
"code": "validation",
"message": "Please fix the highlighted fields.",
"fields": {
"kind": "Use text, image or video."
}
}
}
| الحالة | الرمز | المعنى |
|---|---|---|
| 400 | bad_request | لا يمكن تنفيذ الطلب كما طُلب، مثل جدولة منشور لا يجتاز فحوصاته. |
| 401 | unauthorized | مفتاح API مفقود أو خاطئ أو ملغى. |
| 402 | plan_limit | لا تسمح خطة مساحة العمل بهذا؛ وتُبيّن limit الحد المعني. |
| 403 | forbidden | يفتقر المفتاح إلى نطاق صلاحيات أو إلى إمكانية الوصول إلى المشروع. |
| 404 | not_found | لا يوجد مشروع أو منشور أو وسائط أو نقطة نهاية كهذه. |
| 409 | conflict | يتعارض التغيير مع الحالة الحالية، مثل تعديل منشور يجري نشره بالفعل. |
| 422 | validation | يحتاج حقل واحد أو أكثر إلى إصلاح؛ راجع fields. |
| 429 | rate_limited | أكثر من 120 طلبًا في الدقيقة باستخدام هذا المفتاح. |
| 502 | provider_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 /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) على جسم الطلب الخام. احسبها بنفسك، وقارنها بزمن ثابت، وارفض الطوابع الزمنية القديمة لمنع هجمات إعادة الإرسال.
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);
}
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" }
}
Authorization- مفتاح API الخاص بك. يُعيّن اسم الترويسة والبادئة (
Bearerافتراضيًا) في القناة. Idempotency-Key- معرّف عملية النشر. ترسل إعادة محاولة العملية نفسها المفتاح نفسه، لتتمكن من تخطي العمل الذي أنجزته بالفعل.
X-Amaposta-Delivery- معرّف عملية النشر مرة أخرى، لسجلاتك.
X-Amaposta-Signature- موقّع مثل الويب هوك، باستخدام سر التوقيع الخاص بالقناة.
كيفية الرد
- 2xxتم النشر. يمكنك اختياريًا إرجاع
{"id": "…", "url": "…"}ليظهر الرابط في المنشور. - 401, 403رُفض المفتاح. تُعلّم القناة بأنها تحتاج إلى إعادة ربط ويُبلّغ المسؤولون. لا تستخدم هذه الرموز للتوقيع غير الصحيح.
- 5xx, 408, 429مؤقت. تعيد Amaposta المحاولة بفواصل متزايدة.
- رموز 4xx الأخرىيُعلّم المنشور بأنه فاشل مع رسالتك، ويمكن لشخص إصلاحه والضغط على «إعادة المحاولة».
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 الافتراضية نحو ست عمليات رفع يوميًا لكل تطبيق. | |||||
| صورة | بلا عنوان | التعليقالحد الأقصى للأحرف: ٢٬٢٠٠ | تُضاف إلى النص، بحد أقصى 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 الخاص به وفق نظام الدفع حسب الاستخدام. تُحتسب الوسوم ضمن حد الأحرف. | |||||
| نص | بلا عنوان | منشورمطلوب؛ الحد الأقصى للأحرف: ٦٣٬٢٠٦ | تُضاف إلى النص | لا شيء | |
| صورة | بلا عنوان | التعليقالحد الأقصى للأحرف: ٦٣٬٢٠٦ | تُضاف إلى النص | 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 | |
| يستغرق النشر لحظات لتتمكن من متابعة تغير الحالة مباشرةً. | |||||