Kontakte-API
Ein Kontakt ist eine einzelne Person, der Sie Nachrichten senden – mit Name, Telefonnummer, E-Mail, Kanal, Tags, benutzerdefinierten Feldern sowie den Listen und Kampagnen, denen sie angehört. Mit der Kontakte-API können Sie Kontakte erstellen, suchen, aktualisieren, mit Tags versehen, in großen Mengen importieren und entfernen, ohne das Dashboard verwenden zu müssen.
Alle Pfade auf dieser Seite sind relativ zur Basis-URL:
https://api.youraiconnector.com/v1
Das bedeutet, /contacts entspricht https://api.youraiconnector.com/v1/contacts.
Neu bei der API? Lesen Sie zuerst API-Zugriff – dort wird erklärt, wie Sie Ihren API-Schlüssel generieren, welche drei Authentifizierungsmethoden es gibt, wie Ratenbegrenzungen funktionieren und wie das Fehlerformat aussieht. Alles auf dieser Seite setzt voraus, dass Sie bereits über einen funktionierenden API-Schlüssel verfügen.
Über Kontakt-IDs
Jeder Kontakt hat eine eindeutige ID. Die ID, die Sie beim Erstellen eines Kontakts (in data.contactId) erhalten, ist dieselbe ID, die Sie überall sonst verwenden – um diesen Kontakt abzurufen, zu aktualisieren, mit Tags zu versehen, eine Nachricht zu senden oder ihn zu löschen. Speichern Sie sie einmal und verwenden Sie sie wieder.
Sie müssen einen Kontakt nicht erstellen, um seine ID zu erhalten. Sie können auch nach Telefonnummer oder E-Mail suchen (siehe Kontakt abrufen) oder alle Ihre Kontakte durchblättern (siehe Kontakte auflisten). Jede dieser Methoden gibt dieselbe ID zurück.
Kontakt erstellen
POST /contacts
Fügt Ihrem Konto einen neuen Kontakt hinzu. Eine Telefonnummer mit Ländervorwahl ist erforderlich – eine E-Mail-Adresse allein reicht nicht aus. Alles andere ist optional.
Sie können den neuen Kontakt optional direkt mit listId (eine einzelne Liste) oder listIds (ein Array) in eine oder mehrere Listen aufnehmen. Wenn beides gesendet wird, hat listIds Vorrang.
Jedes Feld, das Sie senden und das nicht eines der Standard-Erstellungsfelder in der unten stehenden Tabelle Kontakt erstellen ist (phoneNumber, firstName, lastName, email, channel, is_bot_active, is_private, lead_profile, listId, listIds, custom_fields), wird automatisch als benutzerdefiniertes Feld gespeichert — daher funktioniert eine flache Payload von einem Tool wie Make oder Zapier ohne Verschachtelung. Sie können auch ein explizites custom_fields-Objekt übergeben.
| Feld | Erforderlich | Beschreibung |
|---|---|---|
phoneNumber |
Ja | Die Telefonnummer des Kontakts mit Ländervorwahl (z. B. +15551234567). |
firstName |
Nein | Vorname. |
lastName |
Nein | Nachname. |
email |
Nein | E-Mail-Adresse. |
channel |
Nein | Nachrichtenkanal. Einer der Werte whatsapp, sms, whatsapp_web. Standardwert ist whatsapp. |
is_bot_active |
Nein | Ob der KI-Assistent auf diesen Kontakt antwortet. Standardwert ist true. |
is_private |
Nein | Markiert den Kontakt als privat. Wenn true, ist der KI-Assistent für diesen Kontakt deaktiviert. Standardwert ist false. |
lead_profile |
Nein | Freitext-Notizen über den Lead. |
listId |
Nein | Eine einzelne Listen-ID, der der Kontakt hinzugefügt werden soll. |
listIds |
Nein | Ein Array von Listen-IDs, denen der Kontakt hinzugefügt werden soll (hat Vorrang vor listId). |
custom_fields |
Nein | Ein Objekt mit Ihren eigenen Schlüssel/Wert-Feldern. Sie können diese auch als Schlüssel auf oberster Ebene übergeben. |
cURL
curl -X POST "https://api.youraiconnector.com/v1/contacts?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"phoneNumber": "+15551234567",
"firstName": "Jane",
"lastName": "Smith",
"email": "jane@example.com",
"is_bot_active": true,
"listIds": ["list123", "list456"]
}'
JavaScript
const res = await fetch("https://api.youraiconnector.com/v1/contacts", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
phoneNumber: "+15551234567",
firstName: "Jane",
lastName: "Smith",
email: "jane@example.com",
is_bot_active: true,
listIds: ["list123", "list456"],
}),
});
const data = await res.json();
console.log(data.data.contactId);
Python
import requests
res = requests.post(
"https://api.youraiconnector.com/v1/contacts",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"phoneNumber": "+15551234567",
"firstName": "Jane",
"lastName": "Smith",
"email": "jane@example.com",
"is_bot_active": True,
"listIds": ["list123", "list456"],
},
)
print(res.json()["data"]["contactId"])
Antwort
{
"success": true,
"data": {
"message": "Successfully created new contact",
"contactId": "contact_abc123",
"listsAdded": ["list123", "list456"]
}
}
Die ID des neuen Kontakts befindet sich unter data.contactId. Die Listen, denen er hinzugefügt wurde, werden in data.listsAdded zurückgegeben.
Es werden keine Duplikate erstellt. Wenn bereits ein Kontakt mit derselben Telefonnummer existiert, erstellt oder gibt der Erstellungsaufruf diesen nicht zurück. Die Antwort erfolgt mit dem HTTP-Status
200und einemerror_codevon409im Body. Verzweigen Sie daher basierend auferror_codeanstatt auf dem HTTP-Status:{ "success": false, "error_code": 409, "error": "A contact with this phone number already exists for the current user." }Um nach einem
error_codevon409mit einem bestehenden Kontakt zu arbeiten, suchen Sie ihn mit Kontakt nach Telefonnummer oder E-Mail abrufen —GET /contacts?phoneNumber=...— und verwenden Sie die zurückgegebene ID erneut.
Äquivalente WhatsApp-Schreibweisen zählen als dieselbe Nummer. Einige Länder haben zwei gültige Schreibweisen für dieselbe Mobilfunkleitung, und WhatsApp meldet möglicherweise eine von beiden: Mexiko (
+52…und die ältere+521…), Brasilien (mit oder ohne die neunte Ziffer) und Argentinien (mit oder ohne die9nach der+54). Die Duplikatprüfung bei der Erstellung undGET /contacts?phoneNumber=erfolgt über beide Schreibweisen hinweg, sodass Sie den bestehenden Kontakt zurückerhalten, egal welche Form Sie senden. Die auf dem Kontakt gespeichertephone_numberwird niemals überschrieben.
Kontakt per Telefon oder E-Mail abrufen
GET /contacts?phoneNumber=... oder GET /contacts?email=...
Sucht einen einzelnen Kontakt und gibt das vollständige, angereicherte Kontaktobjekt zurück – einschließlich seiner Listen, Tags und Kampagnen, die in { id, name }-Paare aufgelöst wurden, sowie der letzten ausgetauschten Nachricht.
Übergeben Sie entweder phoneNumber (im internationalen Format) oder email. Wenn Sie keines von beiden übergeben, schaltet dieser Endpunkt stattdessen in den Modus Kontakte auflisten um.
cURL
curl "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts?phoneNumber=%2B15551234567&apiKey=YOUR_API_KEY"
JavaScript
const phone = encodeURIComponent("+15551234567");
const res = await fetch(`https://api.youraiconnector.com/v1/contacts?phoneNumber=${phone}`, {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
console.log(data.contact);
Python
import requests
res = requests.get(
"<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"phoneNumber": "+15551234567"},
)
print(res.json()["contact"])
Antwort
{
"success": true,
"contactId": "contact_abc123",
"contact": {
"id": "contact_abc123",
"firstName": "Jane",
"lastName": "Smith",
"email": "jane@example.com",
"phoneNumber": "+15551234567",
"channel": "whatsapp",
"isBotActive": true,
"isPrivate": false,
"doNotDisturb": false,
"lead_profile": null,
"avatarUrl": "https://example.com/photo.jpg",
"customFields": {},
"lists": [{ "id": "list123", "name": "VIP customers" }],
"tags": [{ "id": "tagHotLead", "name": "Hot lead" }],
"campaigns": [{ "id": "campaign789", "name": "Spring promo" }],
"currentCampaign": { "id": "campaign789", "name": "Spring promo" },
"lastMessage": {
"direction": "inbound",
"body": "Sounds good, thanks!",
"status": "received",
"timestamp": "2026-06-09T10:21:00.000Z"
}
}
}
Die Kontakt-ID wird sowohl auf der obersten Ebene (contactId) als auch innerhalb des Objekts (contact.id) zurückgegeben. Wenn keine Übereinstimmung gefunden wird, erhalten Sie einen 404 mit { "success": false, "message": "Contact not found" }.
avatarUrlist das Profilfoto des Kontakts, das von WhatsApp oder Meta übernommen wird, wenn dieser Ihnen eine Nachricht sendet. Es ist schreibgeschützt: Sie können es nicht festlegen, und es istnullfür Kontakte, die kein Foto haben oder die Sie über einen Kanal erreichen, der kein Foto bereitstellt. Betrachten Sie den Link als temporär, anstatt ihn zu speichern, da einige dieser Fotolinks ablaufen und automatisch aktualisiert werden. (Im Listen-Endpunkt unten wird derselbe Wert alsavatar_urlbezeichnet.)
Telefonnummern in URLs. Ein
+-Zeichen in einer Abfragezeichenfolge muss als%2BURL-kodiert sein, da es sonst als Leerzeichen gelesen wird. Die obigen Beispiele erledigen dies für Sie.
Einen Kontakt per ID abrufen
GET /contacts/{contactId}
Wenn Sie die ID eines Kontakts bereits haben, können Sie ihn direkt abrufen. Die Antwortstruktur ist identisch mit der obigen Suche.
cURL
curl "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123?apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
console.log(data.contact);
Python
import requests
res = requests.get(
"<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123",
headers={"X-API-Key": "YOUR_API_KEY"},
)
print(res.json()["contact"])
Eine Kontakt-ID, die in Ihrem Konto nicht existiert, gibt einen 404 zurück.
Kontaktstatistiken abrufen
GET /contacts/{contactId}/stats
Gibt aggregierte Nachrichtenstatistiken für einen Kontakt zurück: Summen, KI- vs. menschliche Antworten, verbrauchte Credits sowie Zeitstempel der ersten und letzten Nachricht.
cURL
curl "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/stats?apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/stats", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
console.log(data.totalMessages, data.creditsUsed);
Python
import requests
res = requests.get(
"<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/stats",
headers={"X-API-Key": "YOUR_API_KEY"},
)
data = res.json()
print(data["totalMessages"], data["creditsUsed"])
Antwort
{
"success": true,
"totalMessages": 48,
"sent": 21,
"received": 27,
"aiReplies": 18,
"humanReplies": 3,
"creditsUsed": 34,
"botMessageCount": 18,
"firstMessageAt": "2026-05-01T09:00:00.000Z",
"lastMessageAt": "2026-06-09T10:21:00.000Z"
}
botMessageCount ist derselbe KI-Nachrichtenzähler, den die „Zurücksetzen“-Schaltfläche in der App für einen Kontakt auf Null setzt. creditsUsed ist der laufende Credit-Gesamtstand für diesen Kontakt, nicht nur die Zahlen dieser Antwort. Eine Kontakt-ID, die in Ihrem Konto nicht existiert, gibt einen 404 zurück.
Kontakte auflisten
GET /contacts
Rufen Sie GET /contacts ohne phoneNumber und email auf, um durch alle Ihre Kontakte zu blättern, beginnend mit den neuesten. Jede Seite gibt kompakte Kontaktzusammenfassungen zurück (Listen, Tags und Kampagnen werden als ID-Arrays anstelle von vollständigen Objekten zurückgegeben) sowie einen next_cursor.
| Abfrageparameter | Beschreibung |
|---|---|
limit |
Seitengröße. Standardwert ist 50, Maximum 100. |
cursor |
Der next_cursor-Wert von der vorherigen Seite. Auf der ersten Seite weglassen. |
listId |
Optional. Nur Kontakte zurückgeben, die zu dieser Liste gehören. |
Um alle Seiten zu durchlaufen: Führen Sie den ersten Aufruf ohne Cursor aus und übergeben Sie dann den zurückgegebenen next_cursor als cursor. Stoppen Sie, wenn next_cursor gleich null ist – das bedeutet, dass es keine weiteren Ergebnisse gibt.
cURL
curl "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts?limit=50&apiKey=YOUR_API_KEY"
# next page:
curl "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts?limit=50&cursor=contact_abc123&apiKey=YOUR_API_KEY"
JavaScript
async function listAllContacts() {
const all = [];
let cursor = null;
do {
const url = new URL("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts");
url.searchParams.set("limit", "100");
if (cursor) url.searchParams.set("cursor", cursor);
const res = await fetch(url, { headers: { "X-API-Key": "YOUR_API_KEY" } });
const data = await res.json();
all.push(...data.contacts);
cursor = data.next_cursor;
} while (cursor);
return all;
}
Python
import requests
def list_all_contacts():
all_contacts = []
cursor = None
while True:
params = {"limit": 100}
if cursor:
params["cursor"] = cursor
res = requests.get(
"<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts",
headers={"X-API-Key": "YOUR_API_KEY"},
params=params,
)
data = res.json()
all_contacts.extend(data["contacts"])
cursor = data["next_cursor"]
if not cursor:
break
return all_contacts
Antwort
{
"success": true,
"contacts": [
{
"id": "contact_abc123",
"first_name": "Jane",
"last_name": "Smith",
"email": "jane@example.com",
"phone_number": "+15551234567",
"channel": "whatsapp",
"is_bot_active": true,
"is_private": false,
"do_not_disturb": false,
"avatar_url": "https://example.com/photo.jpg",
"custom_fields": {},
"created_at": "2026-06-01T09:00:00.000Z",
"list_ids": ["list123"],
"tag_ids": ["tagHotLead"],
"campaign_ids": ["campaign789"],
"current_campaign_id": "campaign789"
}
],
"next_cursor": "contact_abc123"
}
Hinweis: Das Filtern nach einem listId, das in Ihrem Konto nicht existiert, gibt ein 404 zurück. Ein ungültiges cursor gibt ein 400 zurück.
Kontakte zählen
GET /contacts/count
Gibt zurück, wie viele Kontakte einem Filter entsprechen, inklusive einer Aufschlüsselung nach Kanal, ohne durch die Seiten blättern zu müssen. Dies ist der richtige Aufruf für jede „Wie viele“-Frage – für ein Dashboard-Element, eine Automatisierung oder eine Anfrage an Champ. Alle Filter sind optional, und die Kombination mehrerer Filter schränkt die Anzahl ein (ein Kontakt muss auf jeden von Ihnen gesendeten Filter zutreffen).
| Abfrageparameter | Beschreibung |
|---|---|
agentId |
Nur Kontakte, die diesem KI-Agenten zugewiesen sind. Übergeben Sie none für Kontakte ohne zugewiesenen Agenten (diese werden vom Standard-Agenten des Kanals beantwortet). |
channel |
Nur Kontakte auf diesem Kanal, z. B. whatsapp, messenger, instagram, sms, email, chat_widget. |
tag |
Nur Kontakte mit diesem Tag, anhand des Tag-Namens (Groß-/Kleinschreibung spielt keine Rolle). Ein Tag-Name, den Sie nicht haben, gibt 404 zurück. |
listId |
Nur Kontakte auf dieser Liste. |
botActive |
true oder false – nur Kontakte, deren KI-Assistent aktiviert oder deaktiviert ist. |
status |
Nur Kontakte mit diesem Status, z. B. Lead. |
rules |
Ein URL-kodiertes JSON-Regelobjekt, das dieselbe Struktur wie eine intelligente Liste verwendet (siehe Die smart_rules-Struktur weiter unten). Kann nicht mit den anderen Filtern kombiniert werden. |
Senden Sie gar keinen Filter, erhalten Sie die Gesamtzahl der Kontakte in Ihrem Konto.
cURL
# everything
curl "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/count?apiKey=YOUR_API_KEY"
# only the contacts one agent handles on Messenger
curl "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/count?agentId=agent_xyz789&channel=messenger&apiKey=YOUR_API_KEY"
JavaScript
const url = new URL("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/count");
url.searchParams.set("agentId", "agent_xyz789");
url.searchParams.set("channel", "messenger");
const res = await fetch(url, { headers: { "X-API-Key": "YOUR_API_KEY" } });
const data = await res.json();
console.log(data.total);
Python
import requests
res = requests.get(
"<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/count",
headers={"X-API-Key": "YOUR_API_KEY"},
params={"agentId": "agent_xyz789", "channel": "messenger"},
)
data = res.json()
print(data["total"])
Antwort
{
"success": true,
"total": 3423,
"by_channel": { "messenger": 2744, "instagram": 667, "none": 12 },
"filters": { "agentId": "agent_xyz789" }
}
by_channel schlüsselt dieselbe Gesamtzahl nach Kanal auf; Kontakte, die keinem Kanal zugeordnet sind, werden unter none gezählt. filters spiegelt die angewendeten Filter wider, sodass Sie überprüfen können, ob der Aufruf das gewünschte Ergebnis erzielt hat.
Hinweis: Das Senden von rules zusammen mit einem anderen Filter oder einem rules-Wert, der kein gültiges JSON ist, führt zu 400. Ein Tag-Name oder eine Listen-ID, die in Ihrem Konto nicht existiert, führt zu 404.
Kontakt aktualisieren
PUT /contacts/{contactId}
Aktualisiert einen bestehenden Kontakt. Nur die Felder, die Sie angeben, werden geändert – lassen Sie alles weg, was Sie nicht ändern möchten. Sie müssen mindestens ein Feld senden, andernfalls erhalten Sie eine 400 („Keine Felder zum Aktualisieren“).
| Feld | Beschreibung |
|---|---|
firstName |
Vorname. |
lastName |
Nachname. |
email |
E-Mail-Adresse. |
is_bot_active |
Ob der KI-Assistent auf diesen Kontakt antwortet. |
is_private |
Als privat markieren. Wenn dies auf true gesetzt wird, wird auch der KI-Assistent deaktiviert. |
do_not_disturb |
Automatisierte Kontaktaufnahme mit diesem Kontakt pausieren. Stoppt auch die KI-Antworten. |
follow_ups_disabled |
Alle automatisierten Nachfassaktionen für diesen Kontakt stoppen (Quick, Cycle und Cold-Lead), während die KI weiterhin auf gesendete Nachrichten antwortet. Nützlich, sobald jemand gekauft hat. Bleibt deaktiviert, bis Sie es wieder auf false setzen. |
lead_profile |
Freitext-Notizen zum Lead. |
custom_fields |
Ein Objekt mit benutzerdefinierten Feldern. Wird pro Schlüssel zusammengeführt – nur die von Ihnen gesendeten Schlüssel werden geschrieben, die restlichen bestehenden benutzerdefinierten Felder bleiben erhalten. Sie können benutzerdefinierte Feld-Schlüssel auch auf der obersten Ebene übergeben. |
cURL
curl -X PUT "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "firstName": "Jane", "do_not_disturb": true }'
JavaScript
const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123", {
method: "PUT",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ firstName: "Jane", do_not_disturb: true }),
});
const data = await res.json();
console.log(data.message);
Python
import requests
res = requests.put(
"<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"firstName": "Jane", "do_not_disturb": True},
)
print(res.json()["message"])
Antwort
{
"success": true,
"message": "Contact updated successfully"
}
Benutzerdefinierte Felder werden zusammengeführt, nicht ersetzt. Das Senden von
{ "custom_fields": { "tier": "gold" } }setzt nurtier– alle anderen benutzerdefinierten Felder des Kontakts bleiben unverändert. Um ein benutzerdefiniertes Feld vollständig für alle Kontakte zu entfernen, verwenden Sie Benutzerdefiniertes Feld löschen.
Tags hinzufügen oder entfernen
POST /contacts/{contactId}/tags
Fügt Tags zu einem einzelnen Kontakt hinzu und/oder entfernt sie in einem einzigen Aufruf. Übergeben Sie Tag-IDs in addTagIds und removeTagIds. Mindestens eines der beiden Felder darf nicht leer sein.
Die Tags müssen bereits in Ihrem Konto existieren – erstellen Sie diese zuerst über den Tags-Endpunkt. Wenn der Kontakt oder ein referenzierter Tag nicht existiert, erhalten Sie eine 404.
| Feld | Beschreibung |
|---|---|
addTagIds |
Array von Tag-IDs, die dem Kontakt hinzugefügt werden sollen. |
removeTagIds |
Array von Tag-IDs, die vom Kontakt entfernt werden sollen. |
cURL
curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/tags?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "addTagIds": ["tagHotLead"], "removeTagIds": ["tagColdLead"] }'
JavaScript
const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/tags", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
addTagIds: ["tagHotLead"],
removeTagIds: ["tagColdLead"],
}),
});
const data = await res.json();
console.log(data.added, data.removed);
Python
import requests
res = requests.post(
"<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/tags",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"addTagIds": ["tagHotLead"], "removeTagIds": ["tagColdLead"]},
)
data = res.json()
print(data["added"], data["removed"])
Antwort
{
"success": true,
"contact_id": "contact_abc123",
"added": 1,
"removed": 1
}
Ihre Tag-Bibliothek verwalten
Diese Endpunkte verwalten das Tag selbst — also das Umbenennen oder Löschen in Ihrem Konto — im Gegensatz zum Anwenden oder Entfernen eines Tags bei einem Kontakt (siehe Tags hinzufügen oder entfernen oben). Jedes Tag in Ihrem Konto hat eine ID (tagId): diejenige, die im Tag-Manager Ihres Dashboards angezeigt wird, und diejenige, die als data.tag_id zurückgegeben wird, wenn Sie ein Tag mit POST /tags und einem JSON-Body von { "name": "..." } erstellen (ohne phoneNumber, email oder contactId).
Ein Tag aktualisieren
PUT /tags/{tagId}
Senden Sie nur die Felder, die Sie ändern möchten.
| Feld | Beschreibung |
|---|---|
name |
Der Name des Tags. |
curl -X PUT "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/tags/tagHotLead?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "Hot lead (Q3)" }'
Antwort
{ "success": true, "tag_id": "tagHotLead" }
Ein tagId, das in Ihrem Konto nicht existiert, gibt einen 404 zurück.
Ein Tag löschen
DELETE /tags/{tagId}
Löscht ein Tag anhand der ID. Dies kann nicht rückgängig gemacht werden — Kontakte, die dieses Tag tragen, verlieren es einfach. Das Löschen eines Tags, das bereits entfernt wurde (oder nie existierte), gibt 200 mit deleted: 0 zurück anstelle eines 404, da es nichts aufzulisten gibt.
curl -X DELETE "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/tags/tagColdLead?apiKey=YOUR_API_KEY"
Antwort
{ "success": true, "deleted": 1 }
Mehrere Tags gleichzeitig löschen
DELETE /tags
| Feld | Beschreibung |
|---|---|
tagIds |
Array der zu löschenden Tag-IDs (max. 1000). |
curl -X DELETE "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/tags?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "tagIds": ["tagColdLead", "tagUnsubscribed"] }'
Antwort
{ "success": true, "deleted": 2 }
IDs, die nicht existieren oder zu einem anderen Konto gehören, werden stillschweigend übersprungen und nicht in deleted gezählt.
Flag massenhaft setzen
POST /contacts/bulk-flag
Setzt ein boolesches Flag für viele Kontakte gleichzeitig. Bis zu 500 Kontakt-IDs pro Anfrage. IDs, die in Ihrem Konto nicht existieren, werden übersprungen und in skipped gezählt.
| Feld | Beschreibung |
|---|---|
contactIds |
Array von Kontakt-IDs, die aktualisiert werden sollen (max. 500). |
field |
Welches Flag gesetzt werden soll. Eines von bot_active (KI-Assistent ein/aus), dnd (automatisierte Kontaktaufnahme pausieren), spam, private. |
value |
Der boolesche Wert, auf den das Flag gesetzt werden soll. |
cURL
curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/bulk-flag?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contactIds": ["contactId1", "contactId2"],
"field": "bot_active",
"value": false
}'
JavaScript
const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/bulk-flag", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
contactIds: ["contactId1", "contactId2"],
field: "bot_active",
value: false,
}),
});
const data = await res.json();
console.log(data.updated, data.skipped);
Python
import requests
res = requests.post(
"<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/bulk-flag",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"contactIds": ["contactId1", "contactId2"],
"field": "bot_active",
"value": False,
},
)
data = res.json()
print(data["updated"], data["skipped"])
Antwort
{
"success": true,
"updated": 2,
"skipped": 0
}
Kontakte massenhaft importieren
POST /contacts/import
Erstellt bis zu 500 Kontakte in einem Aufruf aus einem JSON-Array. Jeder Datensatz benötigt eine phone_number im internationalen Format; alles andere ist optional. Datensätze mit ungültigen Telefonnummern oder nicht unterstützten Kanälen werden übersprungen (nicht erstellt), und jeder übersprungene Datensatz wird mit seinem Index und dem Grund gemeldet – so können Sie nur die Fehler beheben und es erneut versuchen.
Telefonnummern, die bereits in Ihrem Konto existieren, werden standardmäßig als duplicate übersprungen. Senden Sie updateExisting: true, um diese Kontakte stattdessen zu aktualisieren: Die im Datensatz vorhandenen Felder überschreiben die des Kontakts (first_name, last_name, email, lead_profile und custom_fields werden Schlüssel für Schlüssel zusammengeführt), tags werden hinzugefügt und der Kontakt wird zu listId hinzugefügt. Kanal, Telefonnummer und Bot-Flags werden bei einem bestehenden Kontakt niemals geändert.
Sie können optional jeden importierten (oder aktualisierten) Kontakt mit listId zu einer Liste hinzufügen, einen defaultChannel für Datensätze festlegen, die keinen angeben, und Datensätze mit tags markieren (Tag-Namen – fehlende Tags werden erstellt, bestehende werden unabhängig von der Groß-/Kleinschreibung abgeglichen).
Felder auf oberster Ebene
| Feld | Erforderlich | Beschreibung |
|---|---|---|
contacts |
Ja | Array von Kontaktdatensätzen (max. 500). |
listId |
Nein | Liste, zu der jeder importierte (und aktualisierte) Kontakt hinzugefügt werden soll. Muss eine Liste in Ihrem Konto sein. |
defaultChannel |
Nein | Kanal, der auf Datensätze angewendet wird, die channel auslassen. Einer der Werte whatsapp, sms, whatsapp_web. Standardmäßig whatsapp. |
updateExisting |
Nein | true, um Kontakte zu aktualisieren, deren Telefonnummer bereits existiert, anstatt sie als duplicate zu überspringen. Standardmäßig false. |
Felder pro Datensatz
| Feld | Erforderlich | Beschreibung |
|---|---|---|
phone_number |
Ja | Telefonnummer im internationalen Format (ein führendes + wird hinzugefügt, falls es fehlt). |
first_name |
Nein | Vorname. |
last_name |
Nein | Nachname. |
email |
Nein | E-Mail-Adresse. |
channel |
Nein | Einer der Werte whatsapp, sms, whatsapp_web. Greift auf defaultChannel zurück. |
is_bot_active |
Nein | Ob der KI-Assistent antwortet. Standardmäßig true. |
is_private |
Nein | Als privat markieren. Standardmäßig false. |
lead_profile |
Nein | Freitext-Notizen zum Lead. |
custom_fields |
Nein | Objekt mit benutzerdefinierten Feld-Schlüsseln und -Werten. |
tags |
Nein | Array von Tag-Namen (ein einzelner "a; b"-String funktioniert ebenfalls). Tags, die nicht existieren, werden erstellt; bestehende werden unabhängig von der Groß-/Kleinschreibung abgeglichen. Max. 25 pro Datensatz. |
cURL
curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/import?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"contacts": [
{ "phone_number": "+12025551234", "first_name": "Ann", "last_name": "Lee", "tags": ["vip", "newsletter"] },
{ "phone_number": "+12025551235", "first_name": "Bob" }
],
"listId": "list123",
"defaultChannel": "whatsapp_web",
"updateExisting": true
}'
JavaScript
const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/import", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
contacts: [
{ phone_number: "+12025551234", first_name: "Ann", last_name: "Lee", tags: ["vip", "newsletter"] },
{ phone_number: "+12025551235", first_name: "Bob" },
],
listId: "list123",
defaultChannel: "whatsapp_web",
updateExisting: true,
}),
});
const data = await res.json();
console.log(`Imported ${data.imported}, updated ${data.updated}, skipped ${data.skipped.length}`);
Python
import requests
res = requests.post(
"<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/import",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"contacts": [
{"phone_number": "+12025551234", "first_name": "Ann", "last_name": "Lee", "tags": ["vip", "newsletter"]},
{"phone_number": "+12025551235", "first_name": "Bob"},
],
"listId": "list123",
"defaultChannel": "whatsapp_web",
"updateExisting": True,
},
)
data = res.json()
print(f"Imported {data['imported']}, updated {data['updated']}, skipped {len(data['skipped'])}")
Antwort
{
"success": true,
"imported": 2,
"contact_ids": ["contact_abc123", "contact_def456"],
"updated": 0,
"updated_contact_ids": [],
"skipped": []
}
Wenn einige Datensätze nicht erstellt werden können, erscheinen sie in skipped mit dem Grund (hier ohne updateExisting, daher wird die existierende Nummer übersprungen):
{
"success": true,
"imported": 1,
"contact_ids": ["contact_abc123"],
"updated": 0,
"updated_contact_ids": [],
"skipped": [
{ "index": 1, "phone_number": "+12025551235", "reason": "duplicate" }
]
}
Mit updateExisting: true meldet dieselbe Anfrage den existierenden Kontakt stattdessen unter updated / updated_contact_ids.
Mögliche Gründe für das Überspringen: invalid_record, missing_phone_number, invalid_phone_number, invalid_channel, duplicate_in_request, duplicate, contact_limit_reached, create_failed.
Tariflimits. Wenn das Kontaktlimit Ihres Tarifs diese Anzahl neuer Kontakte nicht zulässt, wird die gesamte Anfrage vorab mit einem
403abgelehnt. Wenn das Limit während des Vorgangs erreicht wird, werden die verbleibenden Datensätze mit dem Grundcontact_limit_reachedals übersprungen zurückgegeben.
Kontakte aus einer CSV-Datei importieren
Für Importe, die größer sind als das, was der Massenimport unterstützt (bis zu etwa 50.000 Zeilen), stellen Sie einen asynchronen Importauftrag für eine CSV-Datei in die Warteschlange, die sich bereits im Speicher Ihres Kontos befindet, und fragen Sie diesen ab, bis er abgeschlossen ist.
Import starten
POST /contacts/import-csv
| Feld | Erforderlich | Beschreibung |
|---|---|---|
csvStoragePath |
Ja | Speicherpfad der CSV-Datei unter users/{your account id}/imports/, endend auf .csv. |
listName |
Ja | Erstellt (oder verwendet) eine Liste mit diesem Namen und fügt jeden importierten Kontakt hinzu. |
existingListRefs |
Nein | Array bestehender Listen-IDs, denen jeder importierte Kontakt ebenfalls hinzugefügt werden soll. |
defaultChannel |
Nein | Kanal, der auf Zeilen angewendet wird, die keinen angeben. |
curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/import-csv?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"csvStoragePath": "users/abc123/imports/leads.csv",
"listName": "Webinar signups"
}'
JavaScript
const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/import-csv", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
csvStoragePath: "users/abc123/imports/leads.csv",
listName: "Webinar signups",
}),
});
const data = await res.json();
console.log(data.job_id);
Python
import requests
res = requests.post(
"<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/import-csv",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"csvStoragePath": "users/abc123/imports/leads.csv",
"listName": "Webinar signups",
},
)
job_id = res.json()["job_id"]
Antwort (202 — der Import ist in der Warteschlange, noch nicht abgeschlossen)
{
"success": true,
"job_id": "csvimp_abc123",
"status": "queued"
}
Die Datei in den Speicher bringen. Dieser Endpunkt startet und verfolgt den Importauftrag; er akzeptiert selbst keinen Upload. Die CSV-Datei muss sich bereits unter
csvStoragePathbefinden, bevor Sie ihn aufrufen – der CSV-Importer des Dashboards erledigt dies als ersten Schritt.
Den Import-Job abfragen
GET /contacts/import-csv/{jobId}
curl "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/import-csv/csvimp_abc123?apiKey=YOUR_API_KEY"
Antwort
{
"success": true,
"job_id": "csvimp_abc123",
"status": "completed",
"imported": 812,
"updated": 0,
"skipped": 14,
"errors": [],
"error_message": null
}
status durchläuft queued → processing → completed oder failed mit dem Grund in error_message. Eine jobId, die nicht in Ihrem Konto existiert, gibt einen 404 zurück.
Kontakte exportieren
Startet einen asynchronen CSV-Export Ihrer Kontakte und gibt einen Auftrag zurück, den Sie auf Abschluss abfragen können.
Export starten
POST /contacts/export
| Feld | Erforderlich | Beschreibung |
|---|---|---|
listId |
Nein | Exportiert nur Kontakte, die zu dieser Liste gehören. |
contactIds |
Nein | Exportiert nur diese spezifischen Kontakt-IDs. |
Wenn beide Felder leer gelassen werden, werden alle Kontakte Ihres Kontos exportiert.
curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/export?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "listId": "list123" }'
JavaScript
const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/export", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ listId: "list123" }),
});
const data = await res.json();
console.log(data.job_id);
Python
import requests
res = requests.post(
"<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/export",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"listId": "list123"},
)
job_id = res.json()["job_id"]
Antwort (202 — der Export ist in der Warteschlange)
{
"success": true,
"job_id": "export_abc123",
"status": "queued"
}
Export-Job abfragen
GET /contacts/export/{jobId}
curl "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/export/export_abc123?apiKey=YOUR_API_KEY"
Antwort
{
"success": true,
"job_id": "export_abc123",
"status": "completed",
"export_id": "exp_xyz789",
"contact_count": 812,
"error_message": null
}
Sobald
status"completed"ist, erhalten Sieexport_idundcontact_count. Die heruntergeladene CSV-Datei finden Sie auf der Export-Seite Ihres Dashboards.
Nachricht an einen Kontakt senden
POST /contacts/{contactId}/send-message
Sendet eine Nachricht an einen bestehenden Kontakt über den Kanal, den dieser bereits nutzt. Die Nachricht wird in die Warteschlange gestellt und im Hintergrund zugestellt – die Antwort bestätigt lediglich, dass sie akzeptiert wurde, nicht, dass sie bereits zugestellt ist.
| Feld | Erforderlich | Beschreibung |
|---|---|---|
body |
Ja | Der Text der zu sendenden Nachricht. |
mediaUrl |
Nein | URL einer Mediendatei zum Anhängen. |
mediaContentType |
Nein | MIME-Typ der angehängten Medien (z. B. image/jpeg). |
cURL
curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/send-message?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "body": "Hi! Your appointment is confirmed." }'
JavaScript
const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/send-message", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ body: "Hi! Your appointment is confirmed." }),
});
const data = await res.json();
console.log(data.messageId);
Python
import requests
res = requests.post(
"<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/send-message",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"body": "Hi! Your appointment is confirmed."},
)
print(res.json()["messageId"])
Antwort
{
"success": true,
"messageId": "aB3dE5fG7hI9jK1lM2nO",
"contactId": "contact_abc123",
"channel": "whatsapp",
"message": "Message created successfully. Delivery is being processed."
}
Kann gerade nicht gesendet werden? Wenn der Kontakt den „Nicht stören“-Modus oder den privaten Modus aktiviert hat oder sich auf keinem Kanal befindet, der ausgehende Nachrichten empfangen kann, wird die Anfrage mit einem
422und einer erklärendenerrorabgelehnt.
Informationen zum Senden per Telefonnummer, Instagram-ID oder einer anderen Kanalidentität anstelle einer Kontakt-ID – sowie weitere allgemeine Informationen zum Messaging – finden Sie in der Messages API.
Einen KI-Agenten einem Kontakt zuweisen
POST /contacts/{contactId}/assign-agent
Verschiebt eine bestehende Unterhaltung ab der nächsten Nachricht zu einem anderen KI-Agenten. Dies entspricht der Funktion KI-Agent zuweisen im Chat-Menü und ist derselbe Schritt, den die Aktion KI-Agent oder Kampagne zuweisen in Automatisierungen verwendet.
| Feld | Erforderlich | Beschreibung |
|---|---|---|
agentId |
Ja | Die ID des KI-Agenten, der übernehmen soll, oder null, um die Zuweisung aufzuheben, damit die Unterhaltung zurück in Ihren Team-Posteingang geht. |
triggerAIResponse |
Nein | true veranlasst den neu zugewiesenen Agenten dazu, sofort auf die neuesten unbeantworteten Nachrichten des Kontakts zu antworten. Standardmäßig auf false gesetzt. |
Vorsicht bei
triggerAIResponse: true– es sendet dem Kontakt sofort eine Nachricht. Verwenden Sie es daher nur, wenn Sie möchten, dass der Kontakt jetzt kontaktiert wird. Bei Messenger und Instagram schlägt diese Nachricht fehl, wenn der Kontakt Ihnen zuletzt vor mehr als 24 Stunden geschrieben hat.
cURL
curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/assign-agent?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "agentId": "agent_xyz789" }'
JavaScript
const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/assign-agent", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ agentId: "agent_xyz789" }),
});
const data = await res.json();
console.log(data.data.agentId);
Python
import requests
res = requests.post(
"<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/assign-agent",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"agentId": "agent_xyz789"},
)
print(res.json()["data"]["agentId"])
Antwort
{
"success": true,
"data": {
"contactId": "contact_abc123",
"agentId": "agent_xyz789",
"aiResponseTriggered": false
}
}
Der Agent muss zum selben Konto gehören wie der Kontakt; andernfalls wird die Anfrage mit einem
404oder403abgelehnt. Agenten-IDs finden Sie auf der Seite „KI-Agenten“ (die URL jedes Agenten endet mit seiner ID).
KI-Agent vielen Kontakten zuweisen
POST /contacts/bulk-assign-agent
Verschiebt viele Konversationen in einem Aufruf zu einem anderen KI-Agenten – oder löscht die Zuweisung für alle mit null. Es handelt sich rein um eine Routing-Änderung: Es wird keine Nachricht gesendet und der Agent antwortet niemandem. Jeder Kontakt erhält einfach den neuen Agenten, wenn er das nächste Mal schreibt. (Deshalb gibt es hier kein triggerAIResponse.)
| Feld | Erforderlich | Beschreibung |
|---|---|---|
agentId |
Ja | Der KI-Agent, der übernehmen soll, oder null, um die Zuweisung zu löschen. |
contactIds |
Eines der drei | Bis zu 500 Kontakt-IDs zum Verschieben. |
filter |
Eines der drei | Wählen Sie die Kontakte auf dem Server aus, anstatt sie aufzulisten, beginnend mit den neuesten. Verwendet dieselben Schlüssel wie die Filter des Zähl-Endpunkts: agentId (oder none), channel, tag, listId, botActive, status. |
rules |
Eines der drei | Ein Regelobjekt für intelligente Listen – siehe Die smart_rules-Struktur. |
limit |
Nein | Wie viele Kontakte in diesem Aufruf verschoben werden sollen, wenn Sie mit filter oder rules auswählen. 1 bis 500, Standardwert ist 500. |
Senden Sie genau eines von contactIds, filter oder rules.
cURL
curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/bulk-assign-agent?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"agentId": "agent_xyz789",
"filter": { "agentId": "agent_abc123", "channel": "messenger" }
}'
JavaScript
const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/bulk-assign-agent", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
agentId: "agent_xyz789",
filter: { agentId: "agent_abc123", channel: "messenger" },
}),
});
const data = await res.json();
console.log(data.updated, data.remaining);
Python
import requests
res = requests.post(
"<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/bulk-assign-agent",
headers={"X-API-Key": "YOUR_API_KEY"},
json={
"agentId": "agent_xyz789",
"filter": {"agentId": "agent_abc123", "channel": "messenger"},
},
)
data = res.json()
print(data["updated"], data["remaining"])
Antwort
{
"success": true,
"agentId": "agent_xyz789",
"matched": 3415,
"updated": 500,
"skipped": 0,
"remaining": 2915,
"filters": { "agentId": "agent_abc123" }
}
matched ist die Anzahl der Kontakte, die die Auswahl insgesamt gefunden hat, updated wie viele durch diesen Aufruf verschoben wurden, skipped wie viele der von Ihnen gesendeten IDs in Ihrem Konto nicht gefunden wurden und remaining wie viele nach Abschluss dieses Aufrufs noch übereinstimmen.
Alle verschieben. Da ein Aufruf maximal 500 Kontakte verschiebt, erfordert eine große Gruppe mehrere Aufrufe. Verwenden Sie einen Filter, der nicht mehr auf einen Kontakt zutrifft, sobald er verschoben wurde – zum Beispiel filter: { "agentId": "agent_abc123" } bei der Zuweisung zu agent_xyz789 – und wiederholen Sie genau denselben Aufruf, bis remaining als 0 zurückgegeben wird. Wenn Sie stattdessen contactIds übergeben, ist remaining immer 0.
Kontakt einer Abteilung zuweisen
POST /contacts/{contactId}/department
“Diesen Lead dem Vertrieb zuweisen” — ordnet einen Kontakt einer benannten Abteilung zu und weist ihn standardmäßig der Person in dieser Abteilung zu, die aktuell die wenigsten Kontakte hat. Dies ist unabhängig von der Zuweisung eines KI-Agenten: Eine Abteilung beantwortet die Frage „Welches Team ist zuständig?“, ein Agent beantwortet die Frage „Welche KI antwortet hier?“, und das Festlegen des einen löscht niemals das andere.
| Feld | Erforderlich | Beschreibung |
|---|---|---|
department_id |
Ja | Die Abteilung, der der Kontakt zugeordnet werden soll. Übergeben Sie null, um die Zuordnung aufzuheben. |
hand_to_member |
Nein | Weist den Kontakt zusätzlich der Person in der Abteilung mit der geringsten Auslastung zu. Standardwert ist true. Kontakte, die bereits jemandem gehören, werden nicht neu zugewiesen. |
cURL
curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/department?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "department_id": "dept_sales" }'
JavaScript
const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/department", {
method: "POST",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ department_id: "dept_sales" }),
});
const data = await res.json();
console.log(data.assigned_to);
Python
import requests
res = requests.post(
"<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/department",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"department_id": "dept_sales"},
)
print(res.json()["assigned_to"])
Antwort
{
"success": true,
"department_id": "dept_sales",
"assigned_to": "member_uid_123"
}
assigned_to ist null, wenn der Kontakt bereits jemandem gehörte oder Sie hand_to_member: false übergeben haben.
Kontakt über Kanäle hinweg verknüpfen
“Auf WhatsApp fortfahren” (oder SMS) sucht oder erstellt den Kontakt dieser Person auf einem anderen telefonbasierten Kanal und verknüpft beide miteinander, sodass der Rest der App sie als dieselbe Person erkennt.
Mit einem anderen Kanal verknüpfen
POST /contacts/{contactId}/link-channel
| Feld | Erforderlich | Beschreibung |
|---|---|---|
channel |
Ja | Der Kanal, mit dem verknüpft werden soll. Einer der Werte whatsapp, whatsapp_web, sms. |
phoneNumber |
Nein | Telefonnummer, die für den neuen Kanal verwendet werden soll. Standardmäßig die eigene Nummer des Quellkontakts. |
curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/link-channel?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "channel": "sms" }'
Antwort
{
"success": true,
"data": {
"contact_id": "contact_def456",
"person_id": "person_xyz789",
"created": true
}
}
created gibt an, ob für den Zielkanal ein neuer Kontakt erstellt oder ein bestehender gefunden und verknüpft wurde. Ein zweiter Aufruf ist sicher – er gibt denselben contact_id mit created: false zurück, anstatt ein Duplikat zu erstellen.
Ein 422 bedeutet, dass das Konto diese Verknüpfung derzeit nicht durchführen kann: Der Kontakt befindet sich bereits in dieser Kanalfamilie, hat keine zu verwendende Telefonnummer oder es gibt keinen verbundenen Absender für den Zielkanal. Ein 409 bedeutet, dass die beiden Kontakte bereits mit zwei verschiedenen Personen verknüpft sind – heben Sie zuerst eine Verknüpfung auf.
Verknüpfte Konversationen eines Kontakts auflisten
GET /contacts/{contactId}/linked
Gibt die anderen Konversationen zurück, die dieselbe Person wie dieser Kontakt sind. Ein nicht verknüpfter Kontakt gibt ein leeres Array zurück, keinen 404 – „diese Person hat keine anderen Kanäle“ ist ein normaler Zustand.
curl "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/linked?apiKey=YOUR_API_KEY"
Antwort
{
"success": true,
"data": [
{
"contact_id": "contact_def456",
"channel": "sms",
"custom_channel": null,
"first_name": "Jane",
"last_name": "Smith",
"phone_number": "+15551234567",
"last_message": "Sounds good, thanks!",
"last_message_timestamp": "2026-06-09T10:21:00.000Z",
"linked_from": {
"contact_id": "contact_abc123",
"channel": "whatsapp",
"linked_at": "2026-06-01T09:00:00.000Z",
"reason": "continue_on_channel"
}
}
]
}
Verknüpfung eines Kontakts aufheben
DELETE /contacts/{contactId}/link
Entfernt diesen Kontakt einseitig aus seiner Person – alle anderen Kontakte, die noch mit dieser Person verknüpft sind, behalten ihre Verknüpfung, sodass das Aufheben einer von drei Verknüpfungen die Gruppe nicht auflöst.
curl -X DELETE "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/link?apiKey=YOUR_API_KEY"
Antwort
{ "success": true }
Profilbild eines Kontakts abrufen
POST /contacts/{contactId}/profile-pic
Ruft (und zwischenspeichert) das WhatsApp- oder Meta-Profilfoto des Kontakts bei Bedarf ab – dasselbe Foto, das als avatarUrl unter Kontakt abrufen zurückgegeben wird, jedoch aktualisiert.
curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123/profile-pic?apiKey=YOUR_API_KEY"
Antwort
{
"success": true,
"avatar_url": "https://example.com/photo.jpg",
"cached": false
}
cached: true bedeutet, dass die URL aus einem kürzlichen Abruf stammt und nicht aus einer neuen Anbieterabfrage – Bilder werden 7 Tage lang zwischengespeichert, und ein Kontakt, für den der Anbieter kein erreichbares Foto meldet, wird 24 Stunden lang als nicht verfügbar zwischengespeichert. Wenn kein Bild abgerufen werden kann, wird avatar_url weggelassen und message erklärt den Grund.
Kontakte automatisch mit KI taggen
Führt die Tag-Regeln Ihres Kontos auf den vollständigen Konversationsverlauf eines oder mehrerer Kontakte aus und wendet Tags an (oder entfernt sie) – genau wie beim Echtzeit-Tagging während eines Live-Chats. Es gelten dieselben Regeln und dieselben Kreditkosten pro Tag.
Einen Durchlauf starten
POST /contacts/auto-tag
| Feld | Erforderlich | Beschreibung |
|---|---|---|
scope |
Ja | "contacts", um bestimmte Kontakte zu taggen, oder "agent", um jede Konversation zu taggen, die derzeit von einem KI-Agenten bearbeitet wird. |
contact_ids |
Erforderlich, wenn scope gleich "contacts" ist |
Array von Kontakt-IDs, 1 bis 500. |
agent_id |
Erforderlich, wenn scope gleich "agent" ist |
Der KI-Agent, dessen Konversationen getaggt werden sollen. Wenn scope gleich "contacts" ist, ist dies optional und schränkt lediglich ein, welche Tag-Regeln des Agenten ausgeführt werden. |
curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/auto-tag?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "scope": "contacts", "contact_ids": ["contact_abc123", "contact_def456"] }'
Ein einzelner Kontakt wird inline ausgeführt und liefert das Ergebnis sofort zurück:
{ "success": true, "result": { "tags_applied": 2, "tags_removed": 0 } }
Zwei oder mehr Kontakte (oder scope: "agent") werden als Hintergrundjob ausgeführt und geben sofort 202 zurück:
{ "success": true, "run_id": "m1x2y3-a1b2c3d4", "total": 214 }
Einen Durchlauf abfragen
GET /contacts/auto-tag/run
Gibt den aktuellen (oder letzten) Durchlauf des Kontos zurück, sodass Sie den Fortschritt abfragen können, ohne run_id selbst nachverfolgen zu müssen.
curl "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/auto-tag/run?apiKey=YOUR_API_KEY"
Antwort
{
"success": true,
"run": {
"run_id": "m1x2y3-a1b2c3d4",
"status": "running",
"total": 214,
"processed": 58,
"tagged_contacts": 12,
"tags_applied": 15,
"tags_removed": 2,
"credits_charged": 15
}
}
run ist null, wenn das Konto noch nie einen Durchlauf gestartet hat. status wechselt von "running" zu "completed" oder "failed".
Pro Konto kann immer nur ein Massendurchlauf gleichzeitig aktiv sein – der Start eines zweiten Durchlaufs, während ein anderer läuft, gibt 409 mit error_code: "auto_tag_run_in_progress" zurück. Wenn bei einem Einzelkontakt-Durchlauf die Kredite ausgehen, wird 402 mit error_code: "insufficient_credits" zurückgegeben; ein Massendurchlauf stoppt stattdessen vorzeitig und meldet in run, wie weit er gekommen ist.
Einen Kontakt löschen
DELETE /contacts/{contactId}
Löscht einen Kontakt dauerhaft anhand seiner ID, zusammen mit seinem Nachrichtenverlauf. Dies kann nicht rückgängig gemacht werden. Um mehrere Kontakte in einem einzigen Aufruf zu löschen, verwenden Sie unten Kontakte löschen.
cURL
curl -X DELETE "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123?apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123", {
method: "DELETE",
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
console.log(data.success);
Python
import requests
res = requests.delete(
"<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/contact_abc123",
headers={"X-API-Key": "YOUR_API_KEY"},
)
print(res.json()["success"])
Antwort
{
"success": true
}
Eine Kontakt-ID, die in Ihrem Konto nicht existiert oder zu einem anderen Konto gehört, gibt einen 404 zurück.
Kontakte löschen
DELETE /contacts
Löscht dauerhaft einen oder mehrere Kontakte anhand ihrer ID in einem einzigen Aufruf (bis zu 500 IDs). IDs, die in Ihrem Konto nicht existieren, werden übersprungen und in skipped gezählt. Dies kann nicht rückgängig gemacht werden.
| Feld | Beschreibung |
|---|---|
contactIds |
Array der zu löschenden Kontakt-IDs (max. 500). |
cURL
curl -X DELETE "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "contactIds": ["contactId1", "contactId2"] }'
JavaScript
const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts", {
method: "DELETE",
headers: {
"X-API-Key": "YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ contactIds: ["contactId1", "contactId2"] }),
});
const data = await res.json();
console.log(`Deleted ${data.deleted}, skipped ${data.skipped}`);
Python
import requests
res = requests.delete(
"<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts",
headers={"X-API-Key": "YOUR_API_KEY"},
json={"contactIds": ["contactId1", "contactId2"]},
)
data = res.json()
print(f"Deleted {data['deleted']}, skipped {data['skipped']}")
Antwort
{
"success": true,
"deleted": 2,
"skipped": 0
}
Ein benutzerdefiniertes Feld löschen
DELETE /contacts/custom-fields/{fieldKey}
Entfernt einen benutzerdefinierten Feldschlüssel von jedem Kontakt in Ihrem Konto. Verwenden Sie dies, um nach dem Umbenennen oder Entfernen eines benutzerdefinierten Feldes aufzuräumen. Der Schlüssel darf nur Buchstaben, Zahlen, Unterstriche und Bindestriche enthalten. Gibt zurück, wie viele Kontakte aktualisiert wurden. Dies kann nicht rückgängig gemacht werden.
cURL
curl -X DELETE "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/custom-fields/webinar_date_nh?apiKey=YOUR_API_KEY"
JavaScript
const res = await fetch("<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/custom-fields/webinar_date_nh", {
method: "DELETE",
headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
console.log(`Removed from ${data.updated} contacts`);
Python
import requests
res = requests.delete(
"<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/contacts/custom-fields/webinar_date_nh",
headers={"X-API-Key": "YOUR_API_KEY"},
)
print(f"Removed from {res.json()['updated']} contacts")
Antwort
{
"success": true,
"updated": 42
}
Hinweis: Ein Feld-Schlüssel mit nicht unterstützten Zeichen gibt ein 400 zurück.
Listen
Listen gruppieren Kontakte. Eine Liste ist entweder statisch (Sie entscheiden, wer darauf steht) oder intelligent (die Mitgliedschaft wird anhand von Regeln berechnet und automatisch auf dem neuesten Stand gehalten – siehe Listen & Kontakte organisieren).
| Feld | Beschreibung |
|---|---|
name |
Erforderlich bei der Erstellung. Bis zu 100 Zeichen. |
status |
live (Standard) oder draft. Kleingeschrieben. |
contact_ids |
Array von Kontakt-IDs, die der Liste hinzugefügt werden sollen. Nur für statische Listen. |
type |
static (Standard) oder smart. |
smart_rules |
Das Regelwerk – erforderlich, wenn type auf smart gesetzt ist. Siehe unten. |
Eine Liste erstellen
POST /lists
curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/lists?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Hot leads (active)",
"type": "smart",
"smart_rules": {
"match": "all",
"conditions": [
{ "field": "tags", "op": "has_any", "value": ["tagHotLead"] },
{ "field": "last_activity_at", "op": "within_last", "value": { "amount": 90, "unit": "days" } }
]
}
}'
Antwort
{
"success": true,
"list_id": "list_abc123",
"evaluation": { "added": 3, "removed": 0, "total": 3 }
}
Eine intelligente Liste wird inline in derselben Anfrage ausgewertet, sodass evaluation Ihnen genau anzeigt, wer letztendlich darauf gelandet ist. Bei einer statischen Liste ist evaluation null.
Eine Liste aktualisieren
PUT /lists/{listId}
Senden Sie nur die Felder, die Sie ändern. Das Ändern von smart_rules wertet die Liste sofort neu aus und gibt dasselbe evaluation-Objekt zurück.
curl -X PUT "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/lists/list_abc123?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "smart_rules": { "match": "any", "conditions": [ { "field": "tags", "op": "has_any", "value": ["tagHotLead", "tagWebinar"] } ] } }'
Sie können eine Liste zwischen den beiden Typen umschalten:
- Statisch → intelligent: Senden Sie
{ "type": "smart", "smart_rules": { … } }. Die Regeln greifen sofort. - Intelligent → statisch: Senden Sie
{ "type": "static" }. Die Regeln werden verworfen und alle Kontakte, die sich auf der Liste befinden, bleiben dort.
Die Struktur von smart_rules
{
"match": "all",
"conditions": [
{ "field": "tags", "op": "has_any", "value": ["tagHotLead"] },
{ "field": "channel", "op": "is_any", "value": ["whatsapp", "sms"] },
{ "field": "last_incoming_message_at", "op": "not_within_last", "value": { "amount": 7, "unit": "days" } },
{ "field": "created_at", "op": "after", "value": "2026-01-01" },
{ "field": "is_bot_active", "op": "is", "value": true },
{ "field": "email", "op": "is_set" },
{ "field": "custom_field", "key": "Plan", "op": "eq", "value": "pro" }
]
}
match—all(jede Bedingung muss wahr sein) oderany(mindestens eine).conditions— 1 bis 20 Bedingungen, jede mit maximal 100 Werten, Zeichenfolgen bis zu 200 Zeichen.
field |
op |
value |
|---|---|---|
tags |
has_any, has_all, has_none |
Array von Tag-IDs |
lists |
in_any, not_in_any |
Array von Listen-IDs (nur statische Listen – eine intelligente Liste kann nicht aus einer anderen intelligenten Liste erstellt werden) |
channel |
is_any, is_none |
Array von Kanälen |
status |
is_any, is_none |
Array von Kontaktstatus |
created_at, last_activity_at, last_incoming_message_at, last_outgoing_message_at, first_ai_interaction_at, last_ai_interaction_at |
within_last, not_within_last |
{ "amount": 1–3650, "unit": "hours" | "days" } |
| gleiche Datumsfelder | before, after |
ISO-Datum ("2026-01-01", Vergleich als ganze Tage) oder vollständiges ISO-Datum/Uhrzeit ("2026-01-01T14:30:00Z", Vergleich auf den genauen Zeitpunkt) |
| gleiche Datumsfelder | is_set, not_set |
— |
has_interacted_with_ai |
is |
true / false – true entspricht Kontakten, denen die KI mindestens einmal (überhaupt) eine Nachricht gesendet hat |
is_bot_active, do_not_disturb, is_private, has_ever_responded |
is |
true / false |
email, phone_number, first_name, last_name |
is_set, not_set, contains, not_contains |
Zeichenfolge für die contains-Formulare |
current_campaign_id, assigned_agent |
is_any, is_none, is_set, not_set |
Array von IDs für die is_any / is_none-Formulare |
custom_field (plus ein key) |
eq, neq, contains, not_contains, is_set, not_set |
Zeichenfolge für die Wert-Formulare |
not_within_last findet auch Kontakte, bei denen das Datum nie festgelegt wurde („vor mehr als N Tagen, oder nie“), und Textvergleiche ignorieren die Groß-/Kleinschreibung.
KI-Interaktion. has_interacted_with_ai ist das lebenslange Flag: true für jeden Kontakt, dem Ihre KI mindestens eine Nachricht gesendet hat, false für alle anderen (einschließlich Kontakte, auf die nur Ihr Team geantwortet hat). Es wird bei der ersten Nachricht der KI an einen Kontakt gesetzt und nie gelöscht. Das Deaktivieren der KI-Antworten für den Kontakt oder das Verschieben in eine andere Kampagne setzt es daher nicht zurück. Für einen Zeitraum – „die Kontakte, die meine KI diesen Monat bearbeitet hat“, die übliche Abrechnungsfrage – verwenden Sie stattdessen den Bereich last_ai_interaction_at:
{ "field": "last_ai_interaction_at", "op": "within_last", "value": { "amount": 30, "unit": "days" } }
Verwechseln Sie beides nicht mit is_bot_active (die KI darf antworten, nicht dass sie es getan hat) oder has_ever_responded (der Kontakt hat geantwortet, an wen auch immer). Dieselben zwei Zeitstempel werden bei jedem Kontakt als first_ai_interaction_at / last_ai_interaction_at zurückgegeben, und der gesamte Regelsatz funktioniert auch mit GET /contacts?rules=, sodass Sie Übereinstimmungen zählen können, ohne eine Liste zu erstellen.
Regelwerk in der Vorschau anzeigen
POST /lists/preview
Zählt und stichprobt die Kontakte, die ein Regelwerk erfassen würde, ohne etwas zu erstellen oder zu ändern. Verwenden Sie dies, um Regeln auf Plausibilität zu prüfen, bevor Sie sie speichern.
curl -X POST "<span data-t="apiBaseUrl">https://api.youraiconnector.com</span>/v1/lists/preview?apiKey=YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "smart_rules": { "match": "all", "conditions": [ { "field": "tags", "op": "has_any", "value": ["tagHotLead"] } ] } }'
Antwort
{
"success": true,
"count": 3,
"sample": [
{
"id": "contact_abc123",
"first_name": "Sofia",
"last_name": "Martinez",
"phone_number": "+31600000000",
"email": "sofia@example.com",
"channel": "whatsapp"
}
]
}
sample enthält bis zu 10 Kontakte, sortiert nach der letzten Aktivität.
Smart List jetzt erneut ausführen
POST /lists/{listId}/evaluate
Erzwingt eine sofortige Neubewertung (dasselbe, was Jetzt aktualisieren im Dashboard bewirkt). Smart Lists werden bereits bei Kontaktänderungen sowie alle 15 Minuten bei zeitbasierten Regeln aktualisiert; dies ist also nur erforderlich, wenn Sie das Ergebnis sofort benötigen.
Antwort
{
"success": true,
"list_id": "list_abc123",
"evaluation": { "added": 2, "removed": 1, "total": 4 }
}
evaluation.skipped: true bedeutet, dass bereits eine Auswertung derselben Liste lief und dieser Aufruf keine Auswirkungen hatte.
Smart Lists akzeptieren keine manuell hinzugefügten Mitglieder
Mitgliedschafts-Endpunkte geben 409 mit "This is a smart list — its members are computed from its rules. Edit the rules instead." zurück, wenn die Ziel-Liste eine Smart List ist. Dies betrifft POST /contacts/lists, DELETE /contacts/lists, POST /contacts/lists/batch, contact_ids bei POST /lists und PUT /lists/{listId} sowie die Auswahl einer Smart List als Ziel für einen CSV-Import. Ändern Sie stattdessen die Regeln.
Der Aufruf von POST /lists/{listId}/evaluate für eine statische Liste ist ebenfalls ein 409 — sie hat keine Regeln, die ausgeführt werden könnten.
Kontakte-API-Fehler
Kontakt-Endpunkte geben das Standard-Fehler-Envelope zurück:
{
"success": false,
"error": "Contact not found"
}
Einige Endpunkte enthalten auch error_code, was normalerweise dem HTTP-Status entspricht — die einzige Ausnahme ist der unten beschriebene Fall eines doppelten Kontakts, bei dem der HTTP-Status 200 ist und nur error_code den 409 enthält. Die spezifischen Codes für Kontakt-Endpunkte:
| Code | Wann dies bei einem Kontakt-Endpunkt auftritt |
|---|---|
400 |
Ungültige Anfrage — ein fehlendes/ungültiges Feld, ein leerer Body, ein fehlerhafter Cursor oder mehr als 500 IDs in einem Batch. |
402 |
Nicht genügend Credits, um einen KI-Tagging-Durchlauf für einen Kontakt (error_code: "insufficient_credits") abzuschließen. |
404 |
Der Kontakt, die Liste oder das Tag wurde in Ihrem Konto nicht gefunden. |
409 |
Ein Kontakt mit dieser Telefonnummer existiert bereits (beim Erstellen). Wird als error_code im Body mit einem HTTP-Status von 200 zurückgegeben, daher hier nach error_code verzweigen. Wird auch zurückgegeben, wenn ein automatischer Bulk-Tagging-Durchlauf bereits läuft (error_code: "auto_tag_run_in_progress") oder wenn die Verknüpfung eines Kontakts mit einem anderen Kanal zwei Kontakte verbinden würde, die bereits mit zwei verschiedenen Personen verknüpft sind. |
422 |
Der Kontakt kann derzeit keine Nachricht empfangen (Nicht-stören-Modus, privat oder nicht unterstützter Kanal). Beim Kanal-Verknüpfungs-Endpunkt deckt dies auch fehlende Telefonnummern, eine nicht unterstützte Kanal-Kopplung oder keinen verbundenen Absender für den Zielkanal ab. |
Ein 403 bei einem Kontakt-Endpunkt kann auch ein Problem mit dem Kontaktlimit oder der Listenberechtigung bedeuten, anstatt ein Problem mit dem Tarifzugriff. Die gemeinsamen Codes, die jeder Endpunkt zurückgeben kann — 401, 403 (Ihr Tarif beinhaltet keinen API-Zugriff), 429 (Ratenbegrenzung) und 500 — sind mit Hinweisen zur Wiederholung unter Fehler & Paginierung aufgeführt.
Nächste Schritte
- Messages API — Nachrichten nach Kanalidentität senden und Konversationen verwalten.
- API-Referenz — vollständige Endpunktliste, einschließlich Tags und Listen.
- API-Zugriff — Authentifizierung, Ratenbegrenzungen und Fehlerbehandlung.