Kontakte
Ein Kontakt ist eine Person, die einem Bot in einem Messenger oder im Chat auf einer Website schreibt. Mit den Methoden auf dieser Seite exportieren Sie die Kontakte Ihrer Bots — etwa, um sie in ein CRM zu übernehmen —, zählen sie und legen einen Kontakt aus Ihrem eigenen System an, wenn Sie die Messenger-ID der Person bereits kennen. Mehr zu Kontakten im Dashboard unter Kontakte.
Die Ausgabe lässt sich auf zwei Arten durchblättern: seitenweise (page und count, bis zu 500 Kontakte pro Anfrage) oder mit Versatz vom Anfang (offset und limit, bis zu 1000 Kontakte pro Anfrage). Wie viele Kontakte passen, verrät getNumberOfContacts.
Die Methoden liefern nur Kontakte Ihrer eigenen Bots. Kontakte, die beim Testen eines Bots in der Vorschau entstanden sind, werden weder exportiert noch gezählt.
Kontaktfelder
Alle Methoden, die Kontakte liefern — hier und auf der Seite Eingeladene —, geben sie in derselben Form zurück.
| Feld | Typ | Beschreibung |
|---|---|---|
id |
Zahl | Kontakt-ID |
bot_id |
Zahl | Bot-ID |
phone |
String oder null |
Telefonnummer, wenn der Kontakt sie geteilt hat oder sie über die API gesetzt wurde |
email |
String oder null |
|
name |
String | Name |
address |
String oder null |
Adresse |
messenger |
String | Herkunft des Kontakts: telegram, max, viber, vk oder web (Chat auf der Website) |
utm |
Objekt | Variablen des Kontakts, deren Name mit utm_ beginnt: {"utm_source": "…"}. Gibt es keine, ein leeres Array [] |
avatar |
String oder null |
Link zum Foto des Kontakts. Ein Link auf eine Datei im Speicher ist befristet — speichern Sie die Datei selbst, nicht den Link |
telegram_id |
String | Telegram-Benutzer-ID. Nur bei Telegram-Kontakten |
telegram_username |
String oder null |
Telegram-Benutzername ohne @. Nur bei Telegram-Kontakten |
max_user_id |
Zahl | MAX-Benutzer-ID. Nur bei MAX-Kontakten |
max_username |
String oder null |
MAX-Benutzername. Nur bei MAX-Kontakten |
vk_user_id |
Zahl oder null |
VK-Benutzer-ID. Bei allen Kontakten vorhanden, bei Nicht-VK-Kontakten null |
viber_id |
String | Viber-Benutzer-ID. Nur bei Viber-Kontakten |
created_at |
String | Wann der Kontakt entstanden ist, ISO 8601 in UTC |
unsubscribed_at |
String oder null |
Wann sich der Kontakt vom Bot abgemeldet hat; null — angemeldet |
tags |
Array von Strings | Tags des Kontakts |
variables |
Array von Objekten | Variablen des Kontakts |
Jede Variable in variables ist ein Objekt:
| Feld | Beschreibung |
|---|---|
id |
ID der Variable beim Kontakt |
name |
Name der Variable |
value |
Wert |
type |
Was der Wert enthält: 0 — Text, 1 — Bild, 2 — Dokument, 3 — Audio, 4 — Video. Bei Medien steht in value ein Link zur Datei — die Methode decodeShortLink löst ihn auf |
schema_id, deletable, payload |
Interne Felder |
Mehr zu Tags und Variablen im Dashboard unter Tags und Variablen.
getContacts
Liefert die Kontakte Ihrer Bots — seitenweise (standardmäßig 20 pro Seite) oder mit Versatz vom Anfang.
https://watbot.org/de/api/v1/getContacts| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
bot_id |
Zahl | nein | Nur Kontakte dieses Bots. Ohne den Parameter — Kontakte aller Ihrer Bots |
count |
Zahl | nein | Kontakte pro Seite: 1 bis 500. Standard 20 |
page |
Zahl | nein | Seitennummer, ab 1. Standard 1 |
offset |
Zahl | nein | Wie viele Kontakte vom Anfang übersprungen werden, ab 0. Schaltet auf Abruf mit Versatz um |
limit |
Zahl | nein | Wie viele Kontakte beim Abruf mit Versatz zurückgegeben werden: 1 bis 1000. Standard 100. Schaltet ebenfalls auf Abruf mit Versatz um |
date_from |
Zahl | nein | Kontakte, die frühestens zu diesem Zeitpunkt entstanden sind. Unix-Zeit in Sekunden |
date_to |
Zahl | nein | Kontakte, die spätestens zu diesem Zeitpunkt entstanden sind. Unix-Zeit in Sekunden |
with |
String | nein | Wird aus Kompatibilitätsgründen angenommen, z. B. variables. Ändert nichts: Tags und Variablen sind immer in der Antwort |
Die Kontakte sind aufsteigend nach id sortiert — seitenweise wie mit Versatz. Wird offset oder limit übergeben, gilt der Versatz, und page und count werden ignoriert.
Seitenweise
curl -X POST "https://watbot.org/de/api/v1/getContacts" \
-H "Authorization: Bearer IHR_API_SCHLÜSSEL" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"bot_id": 12345, "count": 2, "date_from": 1758931200}'
{
"data": [
{
"id": 4815162,
"bot_id": 12345,
"phone": "490001234567",
"email": null,
"name": "Anna Schmidt",
"address": null,
"messenger": "telegram",
"utm": {"utm_source": "newsletter"},
"avatar": null,
"telegram_id": "123456789",
"telegram_username": "anna_schmidt",
"vk_user_id": null,
"created_at": "2026-09-28T07:41:12+00:00",
"unsubscribed_at": null,
"tags": ["bestellt"],
"variables": [
{"id": 17590475010001, "name": "utm_source", "value": "newsletter", "type": 0, "schema_id": null, "deletable": false, "payload": null},
{"id": 17590475820003, "name": "stadt", "value": "Leipzig", "type": 0, "schema_id": null, "deletable": false, "payload": null}
]
},
{
"id": 4815170,
"bot_id": 12345,
"phone": null,
"email": null,
"name": "Lukas Müller",
"address": null,
"messenger": "vk",
"utm": [],
"avatar": null,
"vk_user_id": 700123456,
"created_at": "2026-09-29T15:02:47+00:00",
"unsubscribed_at": null,
"tags": [],
"variables": []
}
],
"links": {
"first": "https://watbot.org/de/api/v1/getContacts?page=1",
"last": "https://watbot.org/de/api/v1/getContacts?page=38",
"prev": null,
"next": "https://watbot.org/de/api/v1/getContacts?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 38,
"links": […],
"path": "https://watbot.org/de/api/v1/getContacts",
"per_page": 2,
"to": 2,
"total": 75
}
}
meta.totalist die Gesamtzahl passender Kontakte,meta.last_pagedie Nummer der letzten Seite. Um alles zu exportieren, fragen Sie Seiten ab, bislinks.nextnullist. Die URLs inlinksenthalten außerpagekeinen Ihrer Parameter — senden Siebot_id,countund die Daten bei jeder Anfrage erneut mit.- Neue Kontakte kommen ans Ende der Ausgabe: Die Sortierung nach
idverhindert, dass sich Seiten verschieben. Damit die Ausgabe beim Durchblättern nicht wächst, begrenzen Sie sie mitdate_to. - Eine
bot_ideines fremden oder nicht existierenden Bots führt zu keinem Fehler: Die Liste ist einfach leer.
Mit Versatz
Abfrage des zweiten Hunderts Kontakte eines Bots:
curl -X POST "https://watbot.org/de/api/v1/getContacts" \
-H "Authorization: Bearer IHR_API_SCHLÜSSEL" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"bot_id": 12345, "limit": 100, "offset": 100}'
{
"data": [
{
"id": 4815162,
"bot_id": 12345,
"phone": "490001234567",
"email": null,
"name": "Anna Schmidt",
"address": null,
"messenger": "telegram",
"utm": [],
"avatar": null,
"telegram_id": "123456789",
"telegram_username": "anna_schmidt",
"vk_user_id": null,
"created_at": "2026-09-28T07:41:12+00:00",
"unsubscribed_at": null,
"tags": ["bestellt"],
"variables": [
{"id": 17590475820003, "name": "stadt", "value": "Leipzig", "type": 0, "schema_id": null, "deletable": false, "payload": null}
]
}
],
"meta": {
"offset": 100,
"limit": 100,
"total": 101
}
}
meta.totalist die Gesamtzahl der passenden Kontakte. Der Abruf ist abgeschlossen, wenndataweniger Kontakte alslimitenthält oderoffset + limitmeta.totalerreicht hat.- Für den ersten Abschnitt übergeben Sie
offset0oder lassenoffsetweg.
getNumberOfContacts
Zählt die Kontakte Ihrer Bots — mit denselben Filtern wie getContacts.
https://watbot.org/de/api/v1/getNumberOfContacts| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
bot_id |
Zahl | nein | Nur Kontakte dieses Bots. Ohne den Parameter — aller Ihrer Bots |
date_from |
Zahl | nein | Kontakte, die frühestens zu diesem Zeitpunkt entstanden sind. Unix-Zeit in Sekunden |
date_to |
Zahl | nein | Kontakte, die spätestens zu diesem Zeitpunkt entstanden sind. Unix-Zeit in Sekunden |
curl "https://watbot.org/de/api/v1/getNumberOfContacts?bot_id=12345" \
-H "Authorization: Bearer IHR_API_SCHLÜSSEL" \
-H "Accept: application/json"
{
"count": 1284
}
Die Zahl steht im Feld count auf oberster Ebene, ohne data-Hülle.
createOrUpdateContact
Legt einen Kontakt im Bot an oder aktualisiert einen vorhandenen. Der Kontakt wird im Bot über seine Messenger-ID gesucht: telegram_id, max_id, vk_id oder viber_id. Wird er gefunden, werden seine Daten aktualisiert, sonst wird ein neuer angelegt.
https://watbot.org/de/api/v1/createOrUpdateContact| Parameter | Typ | Pflicht | Beschreibung |
|---|---|---|---|
bot_id |
Zahl | ja | ID Ihres Bots |
messenger |
String | ja | Messenger des Kontakts: telegram, max, viber oder vk |
name |
String | ja | Name des Kontakts. Ersetzt bei jedem Aufruf den bisherigen |
telegram_id |
Zahl | bei telegram |
Telegram-Benutzer-ID |
telegram_username |
String | nein | Telegram-Benutzername, bis 255 Zeichen |
max_id |
Zahl | bei max |
MAX-Benutzer-ID. Kann auch als max_user_id übergeben werden — unter diesem Namen steht sie in der Antwort |
max_username |
String | nein | MAX-Benutzername, bis 255 Zeichen |
vk_id |
Zahl | bei vk |
VK-Benutzer-ID. Kann auch als vk_user_id übergeben werden — unter diesem Namen steht sie in der Antwort |
viber_id |
String | bei viber |
Viber-Benutzer-ID, bis 255 Zeichen |
phone |
String | nein | Telefonnummer im internationalen Format: + und Ziffern, 9 bis 16 Zeichen einschließlich Plus — +490001234567. Wird als Ziffern ohne + gespeichert; null wirkt, als wäre keine Telefonnummer übergeben |
email |
String | nein | |
address |
String | nein | Adresse, bis 255 Zeichen |
tags |
Array von Strings | nein | Tags, bis zu 100, jeweils bis 255 Zeichen. Sie ersetzen alle Tags des Kontakts |
curl -X POST "https://watbot.org/de/api/v1/createOrUpdateContact" \
-H "Authorization: Bearer IHR_API_SCHLÜSSEL" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"bot_id": 12345,
"messenger": "telegram",
"telegram_id": 123456789,
"telegram_username": "anna_schmidt",
"name": "Anna Schmidt",
"phone": "+490001234567",
"email": "anna@example.com",
"tags": ["Kunde", "aus CRM"]
}'
{
"data": {
"id": 4815162,
"bot_id": 12345,
"phone": "490001234567",
"email": "anna@example.com",
"name": "Anna Schmidt",
"address": null,
"messenger": "telegram",
"utm": [],
"avatar": null,
"telegram_id": "123456789",
"telegram_username": "anna_schmidt",
"vk_user_id": null,
"created_at": "2026-10-03T09:15:42+00:00",
"unsubscribed_at": null,
"tags": ["Kunde", "aus CRM"],
"variables": []
}
}
{
"message": "Bot nicht gefunden",
"errors": {
"bot_id": ["Bot nicht gefunden"]
}
}
Statuscode 201 bedeutet, dass der Kontakt angelegt wurde, 200, dass ein vorhandener aktualisiert wurde.
- Was sich bei einem gefundenen Kontakt ändert.
name— immer.email,address,phone,telegram_username,max_username— nur, wenn sie übergeben werden und nicht leer sind: Leeren können Sie sie mit dieser Methode nicht.tags— wenn übergeben, ersetzen sie alle Tags; ein leeres Array[]entfernt alle Tags. Die Variablen des Kontakts bleiben unberührt. - Ein neuer Kontakt erscheint in der Kontaktliste des Bots mit der ersten Nachricht „Created from API“ und erhöht die Zahl der Abonnenten des Bots. Das Szenario des Bots startet dabei nicht, und dem Kontakt wird nichts gesendet.
- Die Telefonnummer wird als Ziffern ohne
+gespeichert — so, wie sie auch Bot-Blöcke speichern. Auchphonein der Antwort kommt ohne+.
Fehler der Methode (allgemeine unter Fehler):
| Code | Wann | Antwort |
|---|---|---|
404 |
Unter Ihren Bots gibt es keinen mit dieser bot_id — es gibt ihn nicht oder er gehört zu einem anderen Konto |
{"message": "…", "errors": {"bot_id": ["…"]}} |
422 |
Die ID für den gewählten Messenger fehlt, oder Telefonnummer bzw. E-Mail haben ein falsches Format | {"message": "…", "errors": {…}} |