API v2 (בטא)
מספרים
מספר הוא מספר WhatsApp או חשבון Telegram שמחובר לסביבת העבודה שלכם. ה-id שלו הוא ה-from שאיתו אתם שולחים הודעות. עם API v2 אתם מציגים אותם, בודקים אם כל אחד מהם מחובר, ומחברים מספר WhatsApp מהאפליקציה שלכם, עם קוד QR או קוד צימוד.
| פעולה | Endpoint | הרשאה |
|---|---|---|
| רשימת מספרים | GET /api/v2/numbers | numbers |
| קבלת מספר | GET /api/v2/numbers/{id} | numbers |
| חיבור מספר WhatsApp | POST /api/v2/numbers | numbers |
מפתח שמוגבל לחלק מהמספרים רואה ומחבר מחדש רק אותם, ולא יכול להוסיף מספר.
רשימת מספרים#
https://wbiztool.com/api/v2/numbersכל המספרים של סביבת העבודה, מהישן לחדש, ברשימת data אחת (בלי דפים).
curl https://wbiztool.com/api/v2/numbers \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"import os
import requests
response = requests.get(
"https://wbiztool.com/api/v2/numbers",
headers={"Authorization": f"Bearer {os.environ['WBIZTOOL_API_KEY']}"},
timeout=30,
)
for number in response.json()["data"]:
print(number["id"], number["phone"], number["label"], number["status"])// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const response = await fetch("https://wbiztool.com/api/v2/numbers", {
headers: { Authorization: `Bearer ${process.env.WBIZTOOL_API_KEY}` },
});
const { data } = await response.json();
for (const number of data) console.log(number.id, number.phone, number.label, number.status);<?php
$ch = curl_init('https://wbiztool.com/api/v2/numbers');
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('WBIZTOOL_API_KEY')],
CURLOPT_RETURNTRANSFER => true,
]);
$numbers = json_decode(curl_exec($ch), true)['data'];
curl_close($ch);
foreach ($numbers as $number) {
echo $number['id'] . ' ' . $number['phone'] . ' ' . $number['status'] . "\n";
}{
"data": [
{
"id": 101,
"phone": "919800000000",
"label": "Shop",
"platform": "whatsapp",
"status": "connected",
"login_method": "qr",
"connect": null
},
{
"id": 102,
"phone": null,
"label": "",
"platform": "whatsapp",
"status": "disconnected",
"login_method": "qr",
"connect": null
}
]
}
ברשימה, connect תמיד null. כדי לעקוב אחרי חיבור, קבלו את המספר.
קבלת מספר#
https://wbiztool.com/api/v2/numbers/{id}מספר אחד. בזמן שהוא מתחבר, ב-connect יש את קוד ה-QR לסריקה או את קוד הצימוד להקלדה.
curl https://wbiztool.com/api/v2/numbers/102 \
-H "Authorization: Bearer $WBIZTOOL_API_KEY"
{
"id": 102,
"phone": null,
"label": "",
"platform": "whatsapp",
"status": "connecting",
"login_method": "qr",
"connect": {
"qr_code_url": "https://…/qr_codes/…png?X-Amz-Signature=…",
"pairing_code": null,
"pairing_code_expires_at": null,
"linking": false,
"requested_at": "2026-10-18T11:02:15.402Z"
}
}
מספר שלא קיים, או שהמפתח לא רשאי להשתמש בו, מחזיר 404 number_not_found.
האובייקט Number#
| שדה | סוג | תיאור |
|---|---|---|
id | integer | המזהה של המספר: ה-from של הודעה או של תזכורת. |
phone | string or null | הספרות שלו עם קידומת המדינה, בלי +, למשל 919800000000. null במספר חדש שמתחבר עם קוד QR, עד שסורקים את הקוד. |
label | string | השם שלו בלוח הבקרה; "" כשאין לו שם. |
platform | string | whatsapp או telegram. |
status | string | connected, connecting (התבקש חיבור ב-10 הדקות האחרונות, והוא עדיין מתבצע) או disconnected. |
login_method | string | איך הוא מתחבר: qr או phone_code (קוד צימוד). |
connect | object or null | כל עוד status הוא connecting, ורק מקבלת מספר; אחרת null. |
ב-connect יש:
| שדה | סוג | תיאור |
|---|---|---|
qr_code_url | string or null | קישור לתמונה של קוד ה-QR לסריקה. כל קריאה נותנת קישור חדש, שתקף 10 דקות; null עד שלשרת יש קוד QR. |
pairing_code | string or null | ב-phone_code: הקוד להקלדה בטלפון. null עד שהוא מוכן. |
pairing_code_expires_at | string or null | מתי קוד הצימוד מפסיק לעבוד. |
linking | boolean | true אחרי שקוד ה-QR נסרק או שהקוד התקבל, בזמן ש-WhatsApp מסיים את הקישור. |
requested_at | string or null | מתי התבקש החיבור. |
הודעות שנשלחות עם מספר במצב disconnected כ-from עדיין מתקבלות: הן ממתינות ויוצאות כשהוא מתחבר שוב. אירועי Webhook למספרים יגיעו בהמשך; עד אז, בצעו polling ל-GET /numbers כדי לזהות מספר שהתנתק.
חיבור מספר WhatsApp#
https://wbiztool.com/api/v2/numbersגוף הבקשה: JSON (application/json)
מבקש משרת של WbizTool לפתוח את WhatsApp עבור מספר, כדי שתוכלו לקשר אותו מהאפליקציה או מהאתר שלכם, כמו בדף מספרי WhatsApp. התגובה היא 202 עם ה-Number, בסטטוס connecting. אחר כך בצעו polling עד שהוא connected.
נדרשת תוכנית שכוללת את ה-API לקוד QR; אחרת התגובה היא 403 plan_required. חשבונות Telegram מחוברים בלוח הבקרה, לא כאן.
גוף הבקשה
login_methodstringאופציונלי
qr(ברירת המחדל): סריקת קוד QR. phone_code: הקלדת קוד צימוד בטלפון במקום זאת, שימושי כשהטלפון הוא המסך היחיד.phonestringחובה ב-phone_codeמספר ה-WhatsApp לקישור, בפורמט בינלאומי עם
+, למשל +919876543210. לא בשימוש עםqr: המספר נקרא מ-WhatsApp אחרי הסריקה.number_idintegerאופציונליחיבור מחדש של המספר הקיים הזה במקום הוספת מספר חדש, למשל אחרי שהוא התנתק.
# By QR code
curl -X POST https://wbiztool.com/api/v2/numbers \
-H "Authorization: Bearer $WBIZTOOL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"login_method": "qr"}'
# By pairing code, reconnecting number 101
curl -X POST https://wbiztool.com/api/v2/numbers \
-H "Authorization: Bearer $WBIZTOOL_API_KEY" \
-H "Content-Type: application/json" \
-d '{"login_method": "phone_code", "phone": "+919876543210", "number_id": 101}'import os
import time
import requests
API = "https://wbiztool.com/api/v2"
headers = {"Authorization": f"Bearer {os.environ['WBIZTOOL_API_KEY']}"}
number = requests.post(f"{API}/numbers", headers=headers,
json={"login_method": "phone_code", "phone": "+919876543210"}, timeout=30).json()
shown = None
while number["status"] == "connecting":
time.sleep(3)
number = requests.get(f"{API}/numbers/{number['id']}", headers=headers, timeout=30).json()
code = (number["connect"] or {}).get("pairing_code")
if code and code != shown:
print("On the phone: WhatsApp → Linked devices → Link with phone number, then type", code)
shown = code
print("Number", number["id"], "is", number["status"])// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const API = "https://wbiztool.com/api/v2";
const headers = { Authorization: `Bearer ${process.env.WBIZTOOL_API_KEY}`, "Content-Type": "application/json" };
let number = await (await fetch(`${API}/numbers`, {
method: "POST", headers, body: JSON.stringify({ login_method: "qr" }),
})).json();
let shown = null;
while (number.status === "connecting") {
await new Promise((r) => setTimeout(r, 3000));
number = await (await fetch(`${API}/numbers/${number.id}`, { headers })).json();
const qr = number.connect?.qr_code_url;
if (qr && qr !== shown) {
console.log("Show this QR code to scan:", qr); // e.g. in an <img> on your page
shown = qr;
}
}
console.log(`Number ${number.id} is ${number.status}`);<?php
$ch = curl_init('https://wbiztool.com/api/v2/numbers');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('WBIZTOOL_API_KEY'), 'Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode(['login_method' => 'qr']),
CURLOPT_RETURNTRANSFER => true,
]);
$number = json_decode(curl_exec($ch), true);
curl_close($ch);
// Save $number['id'], then poll GET /api/v2/numbers/{id} every few seconds (see The connect flow).
echo $number['id'] . ' ' . $number['status'];תהליך החיבור#
בקשת החיבור
POST /numbersעםlogin_method(ועםphoneלקוד צימוד). שמרו את ה-idמהתגובה. שלחוIdempotency-Keyכדי שניסיון חוזר לא יבקש פעמיים.Polling למספר כל כמה שניות
GET /numbers/{id}כל 2 עד 5 שניות כל עודstatusהואconnecting. קוד ה-QR או קוד הצימוד מופיעים ב-connectתוך רגעים; עד אז השדות שלו הםnull.הצגת קוד ה-QR או קוד הצימוד
QR: הציגו את התמונה שב-
connect.qr_code_url; בטלפון, פתחו את WhatsApp ← מכשירים מקושרים (Linked devices) ← קישור מכשיר (Link a device) וסרקו אותה. כל קישור עובד 10 דקות, וקישור חדש מגיע עם כל polling, לכן הציגו בכל פעם את החדש ביותר. קוד צימוד: בטלפון, פתחו את WhatsApp ← מכשירים מקושרים ← קישור מכשיר ← קישור באמצעות מספר טלפון במקום זאת (Link with phone number instead), והקלידו אתconnect.pairing_codeבן 8 התווים לפניconnect.pairing_code_expires_at(בערך 3 דקות).המתנה ל-connected
אחרי הסריקה או הקוד,
connect.linkingהואtrueבזמן ש-WhatsApp מסיים את הקישור. אחר כךstatusהופך ל-connectedו-phoneמציג את המספר. הפסיקו את ה-polling.
אם במשך 10 דקות לא קורה כלום, הניסיון מסתיים ו-status חוזר ל-disconnected. בקשו שוב עם POST /numbers וה-number_id שלו.
בזמן שמספר מתחבר, בקשה נוספת עבורו מחזירה 409 connect_in_progress עם ה-number_id שלו: המשיכו לבצע polling לאותו מספר במקום זאת.
שגיאות בחיבור#
| HTTP | קוד | מתי |
|---|---|---|
400 | validation_failed | login_method אינו qr או phone_code, או phone_code בלי phone |
403 | plan_required | התוכנית לא כוללת את ה-API לקוד QR |
403 | number_limit_reached | אין בתוכנית מקום למספר נוסף |
403 | number_not_allowed | המפתח מוגבל לחלק מהמספרים, ו-number_id אינו אחד מהם (או חסר) |
409 | already_connected | המספר הזה כבר מחובר |
409 | connect_in_progress | המספר הזה מתחבר ממש עכשיו; number_id מציין איזה |
422 | invalid_phone | phone אינו מספר תקין בפורמט בינלאומי עם + |
422 | number_not_found | number_id אינו מספר של סביבת העבודה הזו |
מדריכים קשורים#
- חיבור מספר ה-WhatsApp שלכם בלוח הבקרה
- חיבור חשבון Telegram
- הודעות: שליחה ממספר עם
from - שגיאות
