الإرسال
نص، وسائط، دفعة، ورد القبول 202.
إرسال رسالة نصية
POST /messages
Idempotency-Key: order-123-v1
{
"instance_id": "ins_…",
"type": "text",
"to": "9665xxxxxxxx",
"text": "Hello",
"client_reference": "order-123",
"options": { "delay_profile": "normal" }
} text: مطلوب، حتى 8192 حرفاً (تُحسب الحروف وليس البايتات؛ العربي والإنجليزي سواء). أطول من ذلك يرجع 422 INVALID_TEXT.
المفتاح في Authorization و instance_id في الجسم — مطلوبان ويجب أن يكونا للجلسة نفسها.
حقل to: أرقام فقط مع رمز الدولة بدون + أو أصفار بادئة (مثل 9665xxxxxxxx).
options.delay_profile (اختياري): تأخير عشوائي قبل الإرسال يقلل خطر الحظر — none بدون تأخير، normal من 2 إلى 12 ثانية (الافتراضي)، cautious من 25 إلى 60 ثانية، high_protection من 61 إلى 180 ثانية. استخدم none للرسائل العاجلة فقط مثل رموز التحقق؛ الإرسال الفوري الكثيف يرفع خطر الحظر.
client_reference: مرجع من نظامك حتى 128 حرفاً (اختياري) — يعود معك في GET وفي حدث message.unknown.
رد الإرسال — قبول الطلب (ليس وصوله لواتساب)
HTTP 202
{
"success": true,
"message_id": "msg_…",
"status": "queued",
"request_id": "…"
} الطلب يدخل الطابور ويُرد عليك فوراً بـ 202 دون انتظار واتساب. تابع النتيجة باستعلام GET أو عبر Webhook.
HTTP 200 عند تكرار نفس Idempotency-Key مع نفس جسم الطلب — آمن ولا يُنشئ رسالة مكررة.
وسائط — صورة، فيديو، صوت، مستند
// A) upload, then send by media_id
POST /media (multipart/form-data, field: file, max 50 MB)
→ 201 { "media_id": "med_…", "mime_type": "application/pdf", "file_name": "…", "size_bytes": 1024, "url": "https://…/m/…", "expires_at": "…" }
POST /messages
{
"instance_id": "ins_…",
"type": "media",
"to": "9665xxxxxxxx",
"media": { "media_id": "med_…", "caption": "Invoice" }
}
// B) send from your public URL
{
"instance_id": "ins_…",
"type": "media",
"to": "9665xxxxxxxx",
"media": { "url": "https://example.com/file.pdf", "filename": "file.pdf", "caption": "…" }
} استخدم media_id من الرفع أو url عام (واحد منهما فقط). caption اختياري حتى 2048 حرفاً. الملفات المرفوعة والمستقبلة تُحذف تلقائياً بعد مدة الاحتفاظ، والروابط مؤقتة حتى expires_at.
لإرسال نفس الملف لأرقام كثيرة: ارفعه مرة واحدة واستخدم نفس media_id لكل الأرقام (أو في إرسال دفعة). رفع نفس الملف بنفس الاسم مرة أخرى يعيد نفس media_id، والرفع محدود بـ 30 ملفاً في الدقيقة لكل جلسة.
إرسال دفعة
POST /messages/batch
{
"instance_id": "ins_…",
"messages": [
{ "type": "text", "to": "9665xxxxxxxx", "text": "Hello" },
{ "type": "media", "to": "9665xxxxxxxx", "media": { "media_id": "med_…" } }
]
} حتى 50 رسالة في الطلب؛ تعود نتيجة لكل عنصر في results[] (ok و message_id أو error). Idempotency-Key و delay_profile لا يُطبقان على الدفعة.