كل ما تحتاجه لاستخدام واجهة برمجة التطبيقات لمنصة وصل
جميع طلبات API تتطلب مفتاح API صالح. يُرسل المفتاح في هيدر Authorization مع كل طلب.
Authorization: Bearer YOUR_API_TOKEN
https://waslapi.com/api/v1
| الكود | المعنى |
|---|---|
200 | نجاح |
201 | تم الإنشاء بنجاح |
400 | خطأ في البيانات المرسلة |
401 | غير مصرح - مفتاح API غير صالح |
403 | محظور - تجاوزت حد الاشتراك |
404 | غير موجود |
422 | خطأ في التحقق من البيانات |
429 | تجاوزت حد الطلبات (Rate Limit) |
503 | الخدمة غير متاحة / لا توجد سعة على النودات |
500 | خطأ في الخادم |
/instances
عرض جميع الأرقام المسجلة في حسابك.
curl -X GET https://waslapi.com/api/v1/instances \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"
$response = Http::withToken('YOUR_API_TOKEN')
->get('https://waslapi.com/api/v1/instances');
$instances = $response->json();
/instances
إنشاء رقم جديد.
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
name | string | نعم | اسم الرقم (للتعريف) |
proxy_country | string | لا | كود الدولة للبروكسي (2 حروف). القيم المتاحة عبر /proxy/countries |
curl -X POST https://waslapi.com/api/v1/instances \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "رقم المتجر", "proxy_country": "sa"}'
| HTTP | error | الوصف |
|---|---|---|
201 | - | تم إنشاء الرقم وبدء انتظار QR |
403 | INSTANCE_LIMIT_REACHED | المستخدم تجاوز حد الأرقام في باقته |
503 | NO_CAPACITY | لا توجد سعة متاحة على أي Node |
500 | INSTANCE_CREATION_FAILED | فشل إنشاء الرقم داخل Evolution API |
{
"success": false,
"error": "NO_CAPACITY",
"message": "No server capacity available. Please contact support."
}
/proxy/countries
جلب قائمة الدول المدعومة لحقل proxy_country عند إنشاء رقم جديد.
curl -X GET https://waslapi.com/api/v1/proxy/countries \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"
{
"success": true,
"data": [
{
"code": "sa",
"name_ar": "السعودية",
"name_en": "Saudi Arabia"
},
{
"code": "ae",
"name_ar": "الإمارات",
"name_en": "United Arab Emirates"
}
]
}
/instances/{id}/qr
جلب رمز QR لربط الرقم بالتطبيق. افتح التطبيق → الأجهزة المرتبطة → امسح الرمز.
curl -X GET https://waslapi.com/api/v1/instances/1/qr \
-H "Authorization: Bearer YOUR_API_TOKEN"
/instances/{id}/status
فحص حالة اتصال الرقم (متصل / غير متصل / معلّق).
/instances/{id}
عرض تفاصيل رقم محدد.
curl -X GET https://waslapi.com/api/v1/instances/1 \
-H "Authorization: Bearer YOUR_API_TOKEN"
{
"success": true,
"data": {
"id": 1,
"instance_name": "1_my_store",
"status": "connected",
"phone_number": "966501234567",
"proxy_country": "sa",
"connected_at": "2026-03-01T10:00:00.000000Z",
"created_at": "2026-02-28T08:00:00.000000Z"
}
}
/instances/{id}
حذف رقم نهائياً مع جميع بياناته.
/messages/send-text
إرسال رسالة نصية.
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
instance_id | integer | نعم | معرّف الرقم |
to | string | نعم | رقم المستلم (مع كود الدولة بدون +) |
message | string | نعم | نص الرسالة |
curl -X POST https://waslapi.com/api/v1/messages/send-text \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"instance_id": 1,
"to": "966501234567",
"message": "مرحباً! هذه رسالة تجريبية."
}'
import requests
url = "https://waslapi.com/api/v1/messages/send-text"
headers = {
"Authorization": "Bearer YOUR_API_TOKEN",
"Content-Type": "application/json"
}
data = {
"instance_id": 1,
"to": "966501234567",
"message": "مرحباً من Python!"
}
response = requests.post(url, json=data, headers=headers)
print(response.json())
const response = await fetch('https://waslapi.com/api/v1/messages/send-text', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Content-Type': 'application/json'
},
body: JSON.stringify({
instance_id: 1,
to: '966501234567',
message: 'مرحباً من Node.js!'
})
});
const data = await response.json();
console.log(data);
/messages/send-media
إرسال رسالة وسائط (صورة، فيديو، مستند، صوت).
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
instance_id | integer | نعم | معرّف الرقم |
to | string | نعم | رقم المستلم |
media_type | string | نعم | نوع الوسائط: image, video, document, audio |
media_url | string | نعم | رابط الملف (URL عام) |
caption | string | لا | نص مرفق مع الوسائط |
media_file | file | لا | رفع ملف مباشرة بدلاً من URL (يتطلب multipart/form-data) |
curl -X POST https://waslapi.com/api/v1/messages/send-media \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"instance_id": 1,
"to": "966501234567",
"media_type": "image",
"media_url": "https://example.com/photo.jpg",
"caption": "صورة المنتج"
}'
/messages
عرض سجل الرسائل المرسلة مع إمكانية الفلترة حسب الرقم والحالة والتاريخ.
| المعامل | النوع | الوصف |
|---|---|---|
instance_id | integer | فلترة حسب رقم محدد |
status | string | حالة الرسالة: queued, processing, sent, delivered, failed |
direction | string | الاتجاه: incoming, outgoing |
date_from | date | من تاريخ (YYYY-MM-DD) |
date_to | date | إلى تاريخ (YYYY-MM-DD) |
per_page | integer | عدد النتائج في الصفحة (افتراضي 20) |
يقوم النظام بحفظ جهات الاتصال تلقائياً وتصنيفها حسب مستوى الأمان:
| التصنيف | المعنى | الخطورة |
|---|---|---|
safe 🟢 | العميل راسلك أولاً أو رد على رسالتك | آمن تماماً للإرسال الجماعي |
caution 🟡 | أنت من راسلت هذا الرقم ولم يرد بعد | قد يسبب حظر عند الإرسال الجماعي |
new 🔴 | رقم مستورد لم يتم التواصل معه | خطر حظر عالي جداً |
caution إلى safe عندما يرد العميل على رسالتك.
/contacts
عرض جميع جهات الاتصال مع إمكانية الفلترة.
| المعامل | النوع | الوصف |
|---|---|---|
classification | string | فلترة حسب التصنيف: safe, caution, new |
instance_id | integer | فلترة حسب رقم محدد |
search | string | بحث في رقم الهاتف أو الاسم |
per_page | integer | عدد النتائج في الصفحة (افتراضي 25) |
curl -X GET https://waslapi.com/api/v1/contacts?classification=safe \
-H "Authorization: Bearer YOUR_API_TOKEN"
/contacts/stats
عرض إحصائيات جهات الاتصال حسب التصنيف.
{
"success": true,
"data": {
"total": 150,
"safe": 95,
"caution": 30,
"new": 25,
"blocked": 3
}
}
/contacts
إضافة جهة اتصال جديدة.
| المعامل | النوع | الوصف |
|---|---|---|
phone_number | string * | رقم الهاتف (مثل 966500000000) |
name | string | اسم جهة الاتصال (اختياري) |
instance_id | integer * | معرّف الرقم المربوط |
curl -X POST https://waslapi.com/api/v1/contacts \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"phone_number":"966500000000","name":"أحمد","instance_id":1}'
/contacts/{id}
تعديل اسم أو تصنيف جهة اتصال.
| المعامل | النوع | الوصف |
|---|---|---|
name | string | الاسم الجديد |
classification | string | التصنيف: safe, caution, new |
curl -X PUT https://waslapi.com/api/v1/contacts/1 \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name":"أحمد محمد","classification":"safe"}'
/contacts/{id}/block | /contacts/{id}/unblock
حظر أو رفع حظر جهة اتصال. الجهات المحظورة لا تُشمل في الإرسال الجماعي.
curl -X POST https://waslapi.com/api/v1/contacts/1/block \
-H "Authorization: Bearer YOUR_API_TOKEN"
/contacts/{id}
حذف جهة اتصال.
curl -X DELETE https://waslapi.com/api/v1/contacts/1 \
-H "Authorization: Bearer YOUR_API_TOKEN"
/contacts/transfer
نقل جميع جهات الاتصال من رقم إلى آخر. يتم تغيير التصنيف تلقائياً إلى caution بعد النقل.
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
source_instance_id | integer | نعم | معرّف الرقم المصدر |
target_instance_id | integer | نعم | معرّف الرقم الهدف |
curl -X POST https://waslapi.com/api/v1/contacts/transfer \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"source_instance_id": 1, "target_instance_id": 2}'
/contacts/import
استيراد جهات اتصال من ملف CSV أو VCF. إرسال كـ multipart/form-data.
| المعامل | النوع | الوصف |
|---|---|---|
contacts_file | file * | ملف CSV أو VCF (حد أقصى 5MB / 10,000 جهة) |
instance_id | integer * | معرّف الرقم المربوط |
curl -X POST https://waslapi.com/api/v1/contacts/import \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-F "contacts_file=@contacts.vcf" \
-F "instance_id=1"
/contacts/export/csv | /contacts/export/vcf
تصدير جهات الاتصال بصيغة CSV أو VCF مع إمكانية الفلترة.
| المعامل | النوع | الوصف |
|---|---|---|
classification | string | فلترة: safe, caution, new |
blocked | string | 1 = المحظورين فقط |
curl -X GET https://waslapi.com/api/v1/contacts/export/csv?classification=safe \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-o contacts.csv
safe فقط لتجنب حظر رقمك.
/broadcasts
إنشاء حملة إرسال جماعي جديدة.
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
name | string | نعم | اسم الحملة |
instance_id | integer | نعم | معرّف الرقم المرسل (يجب أن يكون متصلاً) |
message_content | string | نعم | نص الرسالة (حد أقصى 4096 حرف) |
target_classification | string | نعم | تصنيف المستلمين: safe, caution, new, all |
rate_limit_seconds | integer | نعم | الفاصل الزمني بين كل رسالة (بالثواني) — يُضاف ±2 ثانية عشوائياً للحماية |
scheduled_at | datetime | لا | جدولة الإرسال لوقت محدد (ISO 8601) |
broadcast_image | file | لا | صورة مرفقة (JPEG, PNG, WebP, GIF — حد أقصى 5MB). تُضغط تلقائياً إلى JPEG 80%. يتطلب multipart/form-data |
curl -X POST https://waslapi.com/api/v1/broadcasts \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "حملة العيد",
"instance_id": 1,
"message_content": "كل عام وأنتم بخير! 🎉",
"target_classification": "safe",
"rate_limit_seconds": 5
}'
curl -X POST https://waslapi.com/api/v1/broadcasts \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "حملة مجدولة",
"instance_id": 1,
"message_content": "رسالة مجدولة",
"target_classification": "safe",
"rate_limit_seconds": 5,
"scheduled_at": "2026-03-01T10:00:00"
}'
curl -X POST https://waslapi.com/api/v1/broadcasts \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-F "name=حملة بصورة" \
-F "instance_id=1" \
-F "message_content=مرحباً! شاهد عرضنا الجديد" \
-F "target_classification=safe" \
-F "rate_limit_seconds=5" \
-F "broadcast_image=@/path/to/image.png"
/broadcasts
عرض جميع حملات الإرسال الجماعي.
curl -X GET https://waslapi.com/api/v1/broadcasts \
-H "Authorization: Bearer YOUR_API_TOKEN"
/broadcasts/{id}
عرض تفاصيل حملة محددة مع حالة كل مستلم.
curl -X GET https://waslapi.com/api/v1/broadcasts/1 \
-H "Authorization: Bearer YOUR_API_TOKEN"
/broadcasts/{id}/cancel
إلغاء حملة إرسال جماعي (قيد الإرسال أو مجدولة).
curl -X POST https://waslapi.com/api/v1/broadcasts/1/cancel \
-H "Authorization: Bearer YOUR_API_TOKEN"
يمكنك تحديد Webhook URL لحسابك عبر POST /webhooks/setup. المنصة ترسل لك الأحداث التالية لجميع أرقامك:
| الحدث | الوصف |
|---|---|
message.received | عند استقبال رسالة جديدة |
message.sent | عند إرسال رسالة بنجاح |
message.failed | عند فشل إرسال رسالة |
connection.update | عند تغيّر حالة اتصال الرقم (اتصال أو انقطاع) |
X-Webhook-Signature يحتوي على توقيع HMAC-SHA256 للتحقق من المصدر.
/webhooks/setup
تسجيل أو تحديث رابط Webhook لحسابك. جميع أحداث أرقامك سترسل لهذا الرابط.
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
webhook_url | string | نعم | رابط URL لاستقبال الأحداث |
webhook_secret | string | لا | مفتاح سري لتوقيع HMAC-SHA256 |
curl -X POST https://waslapi.com/api/v1/webhooks/setup \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"webhook_url":"https://example.com/webhook","webhook_secret":"my_secret"}'
/webhooks/config
عرض إعدادات Webhook الحالية لحسابك.
curl -X GET https://waslapi.com/api/v1/webhooks/config \
-H "Authorization: Bearer YOUR_API_TOKEN"
{
"success": true,
"data": {
"webhook_url": "https://example.com/webhook",
"has_secret": true
}
}
/usage
عرض بيانات استهلاك الاشتراك الحالي.
curl -X GET https://waslapi.com/api/v1/usage \
-H "Authorization: Bearer YOUR_API_TOKEN"
{
"plan": "احترافي",
"messages_used": 1250,
"messages_limit": 10000,
"messages_remaining": 8750,
"bandwidth_used_mb": 45.2,
"bandwidth_limit_mb": 500,
"instances_count": 3,
"instances_limit": 5,
"contacts_count": 150,
"contacts_limit": 10000,
"allows_broadcast": true,
"allows_scheduling": true,
"expires_at": "2026-04-15"
}