Messaging-API
Nachrichtenverlauf (Message History API)
Rufen Sie eine Liste der Nachrichten in Ihrem Arbeitsbereich für einen Datumsbereich ab, jeweils mit ihrem Status. Nutzen Sie die API, um Versandvorgänge abzugleichen, Berichte zu erstellen oder fehlgeschlagene Nachrichten für einen erneuten Versuch zu finden.
https://wbiztool.com/api/v1/report/Body: JSON (erforderlich für Seiten nach der ersten) oder Formularfelder
Der Verlauf umfasst jede Nachricht im Arbeitsbereich Ihres API-Schlüssels, egal ob sie über die API, das Dashboard oder eine Kampagne gesendet wurde. Die Ergebnisse kommen mit 200 pro Seite, die ältesten zuerst. Dieselben Daten finden Sie auf der Seite Berichte.
Kurzes Beispiel#
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';Ersetzen Sie 12345 und YOUR_API_KEY durch Ihre eigenen Werte. Wo Sie diese finden, steht unter Authentifizierung.
Request-Parameter#
Authentifizierung
client_idintegererforderlichIhre API-Client-ID aus Einstellungen → API-Schlüssel.
api_keystringerforderlichIhr API-Schlüssel von derselben Seite.
Filter
start_datestringerforderlichErster einzubeziehender Tag im Format
DD-MM-YYYY, zum Beispiel01-09-2026.end_datestringerforderlichEnde des Bereichs im Format
DD-MM-YYYY. Dieser Tag selbst ist nicht enthalten. Siehe Datumsbereich.whatsapp_clientintegeroptionalGibt nur Nachrichten zurück, die von dieser WhatsApp-Nummer gesendet wurden, angegeben über ihre ID aus den WhatsApp-Einstellungen. Lassen Sie den Parameter weg, um Nachrichten aller Ihrer Nummern zu erhalten.
pageintegeroptionalSeitennummer, beginnend bei
1(Standard). Jede Seite enthält bis zu 200 Nachrichten. Senden Sie den Wert als JSON-Zahl.0oder eine negative Zahl lieferttotalmit leeremhistory.
Datumsbereich#
Datumsangaben werden als Mitternacht zu Beginn des jeweiligen Tages in indischer Standardzeit (IST, UTC+5:30) interpretiert, und Nachrichten werden nach ihrem Erstellungszeitpunkt (in die Warteschlange gestellt oder geplant) zugeordnet, nicht nach dem Versandzeitpunkt. Der Bereich reicht von start_date 00:00 bis end_date 00:00. Das heißt:
"start_date": "01-09-2026", "end_date": "08-09-2026"liefert den 1. bis 7. September. Der 8. September ist nicht enthalten.- Für einen einzelnen Tag setzen Sie
end_dateauf den Folgetag:"start_date": "15-09-2026", "end_date": "16-09-2026". - Wenn beide Daten gleich sind, erhalten Sie keine Nachrichten.
Paginierung#
Jede Antwort enthält total, die Anzahl der Nachrichten im gesamten Bereich, sowie bis zu 200 davon in history. Fordern Sie page 2, 3 und so weiter an, bis page × 200 mindestens total ist.
Antwort#
Ein erfolgreicher Request gibt HTTP 200 zurück:
{
"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" }
]
}
| Feld | Typ | Beschreibung |
|---|---|---|
message | string | Success, wenn der Request funktioniert hat, andernfalls der Fehler. |
status | integer | Immer 0. Verwenden Sie das Feld nicht, um Erfolg zu erkennen. |
total | integer | Anzahl der Nachrichten im Datumsbereich über alle Seiten. Nur bei Erfolg vorhanden. |
history | array | Bis zu 200 Nachrichten auf dieser Seite, die ältesten zuerst. Bei einem Fehler leer. |
history[].id | integer | Nachrichten-ID, identisch mit der msg_id, die beim Senden zurückgegeben wurde. |
history[].msg_type | string | Text, Image oder File. |
history[].contact | string | Die Telefonnummer des Empfängers mit Ländervorwahl oder bei Gruppennachrichten der Gruppenname. |
history[].message_status | string | Siehe Tabelle unten. |
Werte für den Nachrichtenstatus#
message_status | Bedeutung |
|---|---|
Pending | In der Warteschlange oder geplant, noch nicht gesendet (Status 0). |
Sent | Von Ihrer WhatsApp-Nummer gesendet (Status 1). |
Delivered | Reserviert, wird derzeit nicht zurückgegeben. |
Read | Reserviert, wird derzeit nicht zurückgegeben. |
Failed | Konnte nicht gesendet werden, oder der Sendevorgang wurde unterbrochen (Status 2). Den error sehen Sie über Nachrichtenstatus. |
Cancelled | Vor dem Versand storniert (Status 3). |
Expired | Nicht vor Ablauf der Frist expire_after_seconds gesendet (Status 4). |
Zustell- und Lesehäkchen werden derzeit nicht erfasst, daher erscheinen gesendete Nachrichten immer als Sent. Delivered und Read sind reservierte Werte; falls sie jemals erscheinen, behandeln Sie sie als Sent.
Fehler#
Fehler geben HTTP 200 mit status gleich 0 zurück, sofern nicht anders angegeben:
{ "message": "Error", "status": 0, "history": [] }
| Meldung | Lösung |
|---|---|
Error | start_date oder end_date fehlt oder hat nicht das Format DD-MM-YYYY, der JSON-Body ist ungültig (oft wegen eines abschließenden Kommas) oder der Request war kein POST. |
Auth Error | Senden Sie client_id und api_key. |
Invalid Client Id | Senden Sie client_id als Zahl. Wird mit HTTP 403 ohne history zurückgegeben. |
Auth Error: invalid api key | Prüfen Sie, ob der Schlüssel existiert, nicht gelöscht wurde und zu dieser client_id gehört. Wird mit HTTP 400 ohne history zurückgegeben. |
Demo Account can not access apis | Verwenden Sie ein reguläres Konto. |
Tipps#
- Verlauf in kleinen Bereichen abrufen: Ein Tag oder eine Woche pro Abfrage hält die Anzahl der Seiten gering.
- Fehlgeschlagene Nachrichten finden: Filtern Sie
historynachFailedund rufen Sie dann Nachrichtenstatus mit jederidauf, um den Grund zu sehen. Prüfen Sie vor einem erneuten Versuch denerror:Sending was interrupted and may have been delivered…bedeutet, dass der Empfänger die Nachricht möglicherweise bereits hat. - Alte Nachrichten werden entfernt: Nachrichten, die einen endgültigen Status erreicht haben und sich etwa 90 Tage lang nicht geändert haben, können entfernt werden und erscheinen dann hier nicht mehr. Dasselbe gilt für Nachrichten, die 90 Tage nach ihrer Erstellung oder ihrem geplanten Zeitpunkt noch in der Warteschlange einer getrennten oder gelöschten Nummer stehen.
- Verfolgung in Echtzeit: Um direkt auf den Versand zu reagieren, übergeben Sie beim Senden der Nachricht einen
webhook, statt diesen Endpoint regelmäßig abzufragen.
