メッセージングAPI
メッセージ履歴API
指定した期間のワークスペース内のメッセージ一覧を、それぞれのステータスとともに取得します。送信内容の照合、レポートの作成、再送が必要な失敗メッセージの特定などに利用できます。
https://wbiztool.com/api/v1/report/リクエストボディ: JSON(2ページ目以降に必要)またはフォームフィールド
履歴には、API、ダッシュボード、キャンペーンのどれから送信したかにかかわらず、APIキーのワークスペース内のすべてのメッセージが含まれます。結果は1ページあたり200件で、古い順に返されます。同じデータはレポートページでも確認できます。
クイック例#
curl -X POST https://wbiztool.com/api/v1/report/ \
-H "Content-Type: application/json" \
-d '{
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"start_date": "01-09-2026",
"end_date": "08-09-2026",
"page": 1
}'import requests
page = 1
history = []
while True:
response = requests.post(
"https://wbiztool.com/api/v1/report/",
json={
"client_id": 12345,
"api_key": "YOUR_API_KEY",
"start_date": "01-09-2026",
"end_date": "08-09-2026",
"page": page, # must be a JSON number, not a string
},
timeout=60,
)
result = response.json() # read the body even when the HTTP code is 400
if result.get("message") != "Success" or "total" not in result:
print("Failed:", result.get("message", "no message in response"))
break
history.extend(result["history"])
if page * 200 >= result["total"]:
break
page += 1
failed = [m for m in history if m["message_status"] == "Failed"]
print(len(history), "messages,", len(failed), "failed")// Node.js 18+ (built-in fetch). Save as .mjs to use top-level await.
const history = [];
let page = 1;
while (true) {
const response = await fetch("https://wbiztool.com/api/v1/report/", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
client_id: 12345,
api_key: "YOUR_API_KEY",
start_date: "01-09-2026",
end_date: "08-09-2026",
page, // must be a JSON number, not a string
}),
});
const result = await response.json(); // read the body even when the HTTP code is 400
if (result.message !== "Success" || !("total" in result)) {
console.error("Failed:", result.message ?? "no message in response");
break;
}
history.push(...result.history);
if (page * 200 >= result.total) break;
page += 1;
}
const failed = history.filter((m) => m.message_status === "Failed");
console.log(`${history.length} messages, ${failed.length} failed`);<?php
$history = [];
$page = 1;
do {
$ch = curl_init('https://wbiztool.com/api/v1/report/');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'client_id' => 12345,
'api_key' => 'YOUR_API_KEY',
'start_date' => '01-09-2026',
'end_date' => '08-09-2026',
'page' => $page, // an integer, so json_encode sends a number
]),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 60,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($result['message'] ?? '') !== 'Success' || !isset($result['total'])) {
echo 'Failed: ' . ($result['message'] ?? 'no message in response');
break;
}
$history = array_merge($history, $result['history']);
$page++;
} while (($page - 1) * 200 < $result['total']);
echo count($history) . ' messages';12345とYOUR_API_KEYはご自身の値に置き換えてください。値の確認場所は認証をご覧ください。
リクエストパラメータ#
認証
client_idinteger必須設定 → APIキーに表示されるAPIクライアントIDです。
api_keystring必須同じページにあるAPIキーです。
フィルター
start_datestring必須含める最初の日で、
DD-MM-YYYY形式です(例:01-09-2026)。end_datestring必須期間の終わりで、
DD-MM-YYYY形式です。この日自体は含まれません。日付範囲を参照してください。whatsapp_clientinteger任意このWhatsApp番号から送信されたメッセージのみを返します。WhatsApp設定に表示されるIDを指定してください。省略すると、すべての番号のメッセージを取得します。
pageinteger任意ページ番号で、
1(デフォルト)から始まります。1ページには最大200件のメッセージが含まれます。JSONの数値で送信してください。0または負の数を指定すると、totalと空のhistoryが返ります。
日付範囲#
日付はインド標準時(IST、UTC+5:30)でのその日の開始時点(午前0時)として解釈されます。また、メッセージは送信日時ではなく、作成日時(キューへの登録時または予約時)で照合されます。範囲はstart_dateの00:00からend_dateの00:00までです。そのため、次のようになります。
"start_date": "01-09-2026", "end_date": "08-09-2026"の場合、9月1日から9月7日までが返されます。9月8日は含まれません。- 1日分だけを取得するには、
end_dateを翌日に設定します:"start_date": "15-09-2026", "end_date": "16-09-2026" - 2つの日付が同じ場合、メッセージは返されません。
ページネーション#
各レスポンスには、期間全体のメッセージ数を示すtotalと、history内の最大200件のメッセージが含まれます。page × 200がtotal以上になるまで、pageに2、3と順に指定してリクエストしてください。
レスポンス#
リクエストが成功すると、HTTP 200が返ります。
{
"message": "Success",
"status": 0,
"total": 3,
"history": [
{ "id": 9817263, "msg_type": "Text", "contact": "919876543210", "message_status": "Sent" },
{ "id": 9817264, "msg_type": "File", "contact": "919812345670", "message_status": "Failed" },
{ "id": 9817265, "msg_type": "Image", "contact": "Sales Team Mumbai", "message_status": "Pending" }
]
}
| フィールド | 型 | 説明 |
|---|---|---|
message | string | リクエストが成功した場合はSuccess、それ以外はエラー内容。 |
status | integer | 常に0。成功の判定には使わないでください。 |
total | integer | 全ページを通じた、期間内のメッセージ数。成功時のみ含まれます。 |
history | array | このページの最大200件のメッセージ(古い順)。エラー時は空です。 |
history[].id | integer | メッセージID。送信時に返されたmsg_idと同じです。 |
history[].msg_type | string | Text、Image、Fileのいずれか。 |
history[].contact | string | 国コード付きの受信者の電話番号、またはグループメッセージの場合はグループ名。 |
history[].message_status | string | 下の表を参照してください。 |
メッセージステータスの値#
message_status | 意味 |
|---|---|
Pending | キューに登録済みまたは予約済みで、まだ送信されていません(ステータス0)。 |
Sent | あなたのWhatsApp番号から送信されました(ステータス1)。 |
Delivered | 予約済みの値で、現在は返されません。 |
Read | 予約済みの値で、現在は返されません。 |
Failed | 送信できなかったか、送信が中断されました(ステータス2)。errorを確認するにはメッセージのステータスを使用してください。 |
Cancelled | 送信前にキャンセルされました(ステータス3)。 |
Expired | expire_after_secondsの期限までに送信されませんでした(ステータス4)。 |
現在、配信済みチェックと既読チェックは記録されないため、送信済みのメッセージは常にSentと表示されます。DeliveredとReadは予約済みの値です。万一表示された場合は、Sentとして扱ってください。
エラー#
特に記載がない限り、エラーはHTTP 200で返り、statusは0になります。
{ "message": "Error", "status": 0, "history": [] }
| メッセージ | 対処方法 |
|---|---|
Error | start_dateまたはend_dateがないかDD-MM-YYYY形式ではない、JSONボディが無効(末尾のカンマが原因であることがよくあります)、またはリクエストがPOSTではありません。 |
Auth Error | client_idとapi_keyの両方を送信してください。 |
Invalid Client Id | client_idを数値で送信してください。HTTP 403で、historyなしで返ります。 |
Auth Error: invalid api key | キーが存在し、削除されておらず、このclient_idに属していることを確認してください。HTTP 400で、historyなしで返ります。 |
Demo Account can not access apis | 通常のアカウントを使用してください。 |
ヒント#
- 履歴は短い期間ごとに取得する:1日分や1週間分ずつ取得すると、ページ数を少なく抑えられます。
- 失敗したメッセージを見つける:
historyをFailedで絞り込み、各idでメッセージのステータスを呼び出して失敗の理由を確認してください。再試行する前にerrorを確認してください。Sending was interrupted and may have been delivered…は、受信者がすでにメッセージを受け取っている可能性があることを意味します。 - 古いメッセージは削除される:最終ステータスに達し、約90日間変更のないメッセージは削除され、ここに表示されなくなることがあります。切断または削除された番号で、作成または予約から90日経ってもキューに残っているメッセージも同様です。
- リアルタイムでの追跡:メッセージの送信に合わせて処理するには、このエンドポイントをポーリングする代わりに、メッセージを送信するときに
webhookを指定してください。
