API v2 (beta)
Nomor
Nomor adalah nomor WhatsApp atau akun Telegram yang terhubung ke workspace Anda. id-nya adalah from yang Anda gunakan untuk mengirim pesan. Dengan API v2, Anda dapat menampilkan daftar nomor, melihat apakah masing-masing terhubung, dan menghubungkan nomor WhatsApp dari aplikasi Anda sendiri, dengan kode QR atau kode penautan.
| Operasi | Endpoint | Scope |
|---|---|---|
| Daftar nomor | GET /api/v2/numbers | numbers |
| Mengambil nomor | GET /api/v2/numbers/{id} | numbers |
| Menghubungkan nomor WhatsApp | POST /api/v2/numbers | numbers |
Kunci yang dibatasi ke sebagian nomor hanya melihat dan menghubungkan kembali nomor-nomor itu, dan tidak dapat menambahkan nomor.
Daftar nomor#
https://wbiztool.com/api/v2/numbersSemua nomor workspace, yang terlama lebih dulu, dalam satu daftar data (tanpa halaman).
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 selalu bernilai null di daftar. Untuk mengikuti proses koneksi, ambil nomornya.
Mengambil nomor#
https://wbiztool.com/api/v2/numbers/{id}Satu nomor. Selama nomor sedang dihubungkan, connect berisi kode QR untuk dipindai atau kode penautan untuk diketik.
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"
}
}
Nomor yang tidak ada, atau yang tidak boleh digunakan oleh kunci, dijawab dengan 404 number_not_found.
Objek Number#
| Field | Jenis | Keterangan |
|---|---|---|
id | integer | ID nomor: from pada pesan atau pengingat. |
phone | string or null | Digitnya dengan kode negara, tanpa +, seperti 919800000000. null untuk nomor baru yang dihubungkan dengan QR sampai kode QR dipindai. |
label | string | Namanya di dashboard; "" jika tidak ada. |
platform | string | whatsapp atau telegram. |
status | string | connected, connecting (koneksi diminta dalam 10 menit terakhir dan masih berjalan), atau disconnected. |
login_method | string | Cara terhubung: qr atau phone_code (kode penautan). |
connect | object or null | Selama status bernilai connecting, dan hanya dari Mengambil nomor; selain itu null. |
connect berisi:
| Field | Jenis | Keterangan |
|---|---|---|
qr_code_url | string or null | Tautan ke gambar kode QR untuk dipindai. Setiap panggilan memberikan tautan baru, berlaku 10 menit; null sampai server memiliki kode QR. |
pairing_code | string or null | Untuk phone_code: kode yang diketik di ponsel. null sampai siap. |
pairing_code_expires_at | string or null | Kapan kode penautan berhenti berlaku. |
linking | boolean | true setelah kode QR dipindai atau kode diterima, selama WhatsApp menyelesaikan penautan. |
requested_at | string or null | Kapan koneksi diminta. |
Pesan yang dikirim dengan nomor disconnected sebagai from tetap diterima: pesan menunggu dan dikirim saat nomor terhubung kembali. Peristiwa webhook untuk nomor akan menyusul; sampai saat itu, lakukan polling GET /numbers untuk mengetahui nomor yang ter-logout.
Menghubungkan nomor WhatsApp#
https://wbiztool.com/api/v2/numbersBody: JSON (application/json)
Meminta server WbizTool membuka WhatsApp untuk sebuah nomor, sehingga Anda dapat menautkannya dari aplikasi atau situs web Anda sendiri, seperti di halaman Nomor WhatsApp. Responsnya 202 dengan Number berstatus connecting. Lalu lakukan polling sampai statusnya connected.
Endpoint ini memerlukan paket yang mencakup API kode QR; jika tidak, dijawab dengan 403 plan_required. Akun Telegram dihubungkan di dashboard, bukan di sini.
Body
login_methodstringopsionalqr(default): pindai kode QR.phone_code: ketik kode penautan di ponsel, praktis jika ponsel adalah satu-satunya layar.phonestringWajib untuk phone_codeNomor WhatsApp yang akan ditautkan, dalam format internasional dengan
+, seperti+919876543210. Tidak dipakai denganqr: nomor dibaca dari WhatsApp setelah pemindaian.number_idintegeropsionalHubungkan kembali nomor yang sudah ada ini alih-alih menambahkan nomor baru, misalnya setelah nomor itu ter-logout.
# 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'];Alur koneksi#
Minta koneksi
POST /numbersdenganlogin_method(danphoneuntuk kode penautan). Simpaniddari respons. KirimIdempotency-Keyagar percobaan ulang tidak meminta dua kali.Lakukan polling nomor setiap beberapa detik
GET /numbers/{id}setiap 2 hingga 5 detik selamastatusbernilaiconnecting. Kode QR atau kode penautan muncul diconnectdalam hitungan detik; sebelum itu field-nya bernilainull.Tampilkan kode QR atau kode penautan
QR: tampilkan gambar di
connect.qr_code_url; di ponsel, buka WhatsApp → Perangkat tertaut → Tautkan perangkat dan pindai. Setiap tautan berlaku 10 menit dan tautan baru datang di setiap polling, jadi selalu tampilkan yang terbaru. Kode penautan: di ponsel, buka WhatsApp → Perangkat tertaut → Tautkan perangkat → Tautkan dengan nomor telepon saja, lalu ketikconnect.pairing_code8 karakter sebelumconnect.pairing_code_expires_at(sekitar 3 menit).Tunggu sampai terhubung
Setelah pemindaian atau kode,
connect.linkingbernilaitrueselama WhatsApp menyelesaikan penautan. Lalustatusmenjadiconnecteddanphonemenampilkan nomornya. Hentikan polling.
Jika tidak terjadi apa pun selama 10 menit, upaya itu berakhir dan status kembali menjadi disconnected. Minta lagi dengan POST /numbers beserta number_id-nya.
Selama sebuah nomor sedang dihubungkan, request lain untuk nomor itu dijawab dengan 409 connect_in_progress beserta number_id-nya: lanjutkan polling nomor itu saja.
Error saat menghubungkan#
| HTTP | Kode | Kapan |
|---|---|---|
400 | validation_failed | login_method bukan qr atau phone_code, atau phone_code tanpa phone |
403 | plan_required | Paket tidak mencakup API kode QR |
403 | number_limit_reached | Paket tidak memiliki ruang untuk nomor lain |
403 | number_not_allowed | Kunci dibatasi ke sebagian nomor, dan number_id bukan salah satunya (atau tidak dikirim) |
409 | already_connected | Nomor itu sudah terhubung |
409 | connect_in_progress | Nomor itu sedang dihubungkan saat ini; number_id menunjukkan nomor yang mana |
422 | invalid_phone | phone bukan nomor yang valid dalam format internasional dengan + |
422 | number_not_found | number_id bukan nomor workspace ini |
Terkait#
- Hubungkan nomor WhatsApp Anda di dashboard
- Hubungkan akun Telegram
- Pesan: kirim dari sebuah nomor dengan
from - Error
