Entwickler-Doku

Binde Chat33
in deinen Stack ein.

Tracking-Pixel, Webhook-Events, MMP-Install-Postbacks und Umsatz-Tracking. Alles, was du brauchst, um Chat33 mit deiner Website oder App zu verbinden.

Erste Schritte

Für die Chat33-Entwicklerintegrationen brauchst du einen MMP-Token. Du findest ihn in deinem Dashboard unter Einstellungen → Integrationen.

1. Token holen

Öffne Einstellungen → Integrationen → MMP-Token. Klicke auf „Token generieren“, falls du noch keinen hast.

2. Integration wählen

Website / Web-App

Nutze den Tracking-Pixel, um Seitenaufrufe, Anmeldungen und Käufe zu tracken.

Mobile App

Nutze MMP-Postbacks (AppsFlyer, Adjust, Branch, Tenjin, Singular), um Installs zu tracken.

Tracking-Pixel

Tracke Website-Events und ordne sie DM-Unterhaltungen zu

Installation

Füge dieses Script-Tag in den <head> deiner Website ein oder vor </body>. Ersetze YOUR_PIXEL_KEY durch den Pixel-Key aus Einstellungen, Integrationen. Verwende hier nie deinen MMP-Token: Er ist geheim.

html
<script src="https://chat33.io/pixel.js" data-token="YOUR_PIXEL_KEY"></script>

Events tracken

Der Pixel trackt Seitenaufrufe automatisch. Für eigene Events (Käufe, Anmeldungen usw.) nutze die Methode chat33.track():

javascript
// Track a purchase with value
chat33.track("purchase", {
  value: 49.99,
  currency: "USD",
  product: "Pro Plan"
});

// Track a signup
chat33.track("signup");

// Track a lead
chat33.track("lead", { source: "landing_page" });

// Track any custom event
chat33.track("tutorial_complete", { step: 5 });

So funktioniert es

Smart Links

Chat33 hängt ?cid=xxx an getrackte Links in DMs an

Auto-Zuordnung

Der Pixel liest die Kontakt-ID aus der URL und behält sie über mehrere Seiten bei

Auto-Tagging

Events wie „purchase“ taggen den Kontakt automatisch in deinem CRM

API-Referenz

MethodeParameterBeschreibung
chat33.track(event, metadata?)event: string, metadata: objectEigenes Event senden
chat33.identify(contactId)contactId: stringKontakt-ID manuell setzen
chat33.getContactId()—Gibt die aktuelle Kontakt-ID zurück

Webhook-Events-API

Sende eigene Events von deinem Server an Chat33

Endpoint

http
POST https://chat33.io/api/webhooks/events?token=YOUR_TOKEN

Content-Type: application/json

{
  "event": "purchase",
  "contactId": "cm1abc123...",
  "value": 49.99,
  "currency": "USD",
  "metadata": {
    "product": "Pro Plan",
    "source": "checkout"
  }
}

Request-Body

FeldTypPflichtfeldBeschreibung
eventstringJaEvent-Name (purchase, signup, lead usw.)
contactIdstringNeinChat33-Kontakt-ID zur Zuordnung
valuenumberNeinGeldwert des Events
currencystringNeinWährungscode (USD, EUR usw.)
metadataobjectNeinBeliebige zusätzliche Daten

Beispiele

bash
# cURL
curl -X POST "https://chat33.io/api/webhooks/events?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"event":"purchase","value":29.99,"currency":"USD"}'
javascript
// Node.js / fetch
await fetch("https://chat33.io/api/webhooks/events?token=YOUR_TOKEN", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    event: "purchase",
    contactId: "cm1abc123...",
    value: 29.99,
    currency: "USD",
  }),
});

Rate-Limit: 100 Events pro Minute und Token. Events werden als Analyse-Events gespeichert, und Kontakte werden anhand der Event-Namen automatisch getaggt (z. B. „purchase“ → Tag „Purchased“).

Social-Posting-API

Plane und veröffentliche Inhalte auf Instagram, Facebook, TikTok, YouTube, X (Twitter), LinkedIn, Bluesky und Threads

Authentifizierung

Erzeuge einen API-Key unter Einstellungen → API Keys. Sende ihn in allen Requests als Header x-api-key mit.

bash
# All API requests require this header:
x-api-key: sk_live_your_api_key_here

Unterstützte Plattformen

Instagram

Fotos, Reels, Karussells (über die IG Graph API)

Facebook

Text, Fotos, Videos mit nativer Planung

TikTok

Videos und Foto-Beiträge über die Content Posting API

YouTube

Video-Uploads mit nativer geplanter Veröffentlichung

X (Twitter)

Text, Fotos, Video und Threads über die X API v2 (verbraucht Guthaben)

LinkedIn

Text, Link-Karten, bis zu 9 Bilder oder Video, gepostet auf dem eigenen Profil der Person

Bluesky

Text, Link-Karten, bis zu 4 Bilder oder Video, über das AT Protocol

Threads

Text, Bilder, Video, Karussells mit bis zu 20 Elementen, Umfragen und Themen-Tags

Beitrag erstellen

bash
curl -X POST "https://chat33.io/api/v1/posts" \
  -H "x-api-key: sk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "accountIds": ["channel_id_here"],
    "text": "Check out our new product! #launch",
    "mediaUrls": ["https://your-blob-url.com/image.jpg"],
    "mediaType": "image"
  }'

Plattform-Optionen (platformConfig)

Einstellungen pro Plattform stehen unter einem Key, der nach der Plattform benannt ist. Gelesen werden nur die Keys der Plattformen in accountIds, ein Request kann also Optionen für mehrere gleichzeitig enthalten. Jede Plattform akzeptiert einen text-Override, sodass ein Beitrag in jedem Netzwerk anders lauten kann.

Zwei Verhaltensweisen, die du vor dem ersten Aufruf kennen solltest: youtube.madeForKids wird abgelehnt, wenn es fehlt, statt einen Standardwert zu bekommen, weil YouTube die Angabe bei jedem Upload verlangt. Und ein TikTok-Beitrag ohne consent-Objekt landet in den Entwürfen des Kontos, statt zu veröffentlichen.

json
{
  "instagram": {
    "text": "...",                     // caption for this platform only
    "firstComment": "#tags #here"      // posted right after publish
  },
  "facebook": {
    "text": "..."
  },
  "linkedin": {
    "text": "...",
    "visibility": "PUBLIC",            // or "CONNECTIONS" (1st-degree only)
    "articleUrl": "https://...",       // link card, ignored when the post has media
    "mediaTitle": "...",
    "mediaDescription": "..."
  },
  "youtube": {
    "madeForKids": false,              // REQUIRED for any YouTube channel
    "privacyStatus": "public",         // or "unlisted" / "private"
    "title": "...",
    "description": "...",
    "tags": ["one", "two"],            // up to 30
    "categoryId": "22",                // default: People & Blogs
    "notifySubscribers": true
  },
  "x": {
    "text": "...",
    "thread": true,                    // split text into a thread
    "splitOn": "---",
    "replyControl": "everyone"         // or "following" / "mentionedUsers"
  },
  "tiktok": {
    "text": "...",
    "consent": {
      "publishMode": "DIRECT_POST",    // or "MEDIA_UPLOAD" (drafts)
      "privacyLevel": "SELF_ONLY",     // required for DIRECT_POST
      "disableComment": false,
      "disableDuet": false,
      "disableStitch": false,
      "aiGenerated": false
    }
  }
}

LinkedIn-Besonderheiten

  • Beiträge werden auf dem eigenen Profil der authentifizierten Person veröffentlicht. Unternehmensseiten brauchen die Community Management API von LinkedIn, die eine eigene Prüfung ist und noch nicht unterstützt wird.
  • Ein Beitrag enthält bis zu 9 Bilder oder 1 Video, nie beides. Wer das Limit überschreitet, wird abgelehnt, statt stillschweigend gekürzt zu werden.
  • Der Beitragstext ist auf 3.000 Zeichen begrenzt. Video 200 MB, Bilder je 10 MB.
  • articleUrl gilt nur für Textbeiträge. Medien haben Vorrang, und der Link wird ignoriert.
  • Der Zugriff läuft nach 60 Tagen ab, und LinkedIn stellt kein Refresh-Token aus, deshalb muss das Konto manuell neu verbunden werden. Nach Ablauf liefert das Veröffentlichen einen klaren Reconnect-Fehler.
  • LinkedIn drosselt auf 150 API-Requests pro Person und Tag, und jedes Bild kostet zwei zusätzliche Aufrufe, das Limit gilt also für Requests, nicht für die Zahl der Beiträge.

Beitrag planen

bash
curl -X POST "https://chat33.io/api/v1/posts" \
  -H "x-api-key: sk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "accountIds": ["ig_channel_id", "fb_channel_id"],
    "text": "Coming soon!",
    "mediaUrls": ["https://your-blob-url.com/video.mp4"],
    "mediaType": "video",
    "scheduledAt": "2026-04-15T14:00:00Z",
    "callbackUrl": "https://your-server.com/webhook"
  }'

Medien hochladen

Multipart-Uploads sind hart auf 4,5 MB begrenzt. Größere Bodys werden mit 413 FUNCTION_PAYLOAD_TOO_LARGE abgelehnt, bevor sie die API erreichen. Für alles Größere lade von einer öffentlichen URL ein, oder hole dir eine Presigned-URL und lade direkt in den Speicher hoch.

bash
# Small files (< 4.5MB): multipart upload
curl -X POST "https://chat33.io/api/v1/media/upload" \
  -H "x-api-key: sk_live_your_key" \
  -F "file=@photo.jpg"

# Large files, already on a public URL: URL ingestion (up to 4GB)
curl -X POST "https://chat33.io/api/v1/media/upload" \
  -H "x-api-key: sk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/large-video.mp4", "filename": "video.mp4"}'

# Large LOCAL file: presigned direct upload (up to 500MB per PUT)
# 1. ask for an upload URL
curl -X POST "https://chat33.io/api/v1/media/upload-url" \
  -H "x-api-key: sk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{"filename": "video.mp4", "contentType": "video/mp4", "size": 16352652}'
# -> {"uploadUrl": "https://...", "headers": {"content-type": "video/mp4"}, ...}

# 2. PUT the bytes straight to storage (never touches the API)
curl -X PUT "<uploadUrl>" \
  -H "Content-Type: video/mp4" \
  --data-binary @video.mp4
# -> {"url": "https://....public.blob.vercel-storage.com/...", ...}
#    pass that url in mediaUrls when creating the post

API-Referenz

MethodeEndpointBeschreibung
POST
/api/v1/postsBeitrag/Beiträge erstellen und einreihen
GET
/api/v1/postsBeiträge auflisten (paginiert, filterbar)
GET
/api/v1/posts/:idBeitragsdetails abrufen
PATCH
/api/v1/posts/:idEntwurf/eingereihten Beitrag bearbeiten oder abbrechen
DELETE
/api/v1/posts/:idEntwurf löschen oder Beitrag abbrechen
POST
/api/v1/posts/:id/duplicateBeitrag klonen
POST
/api/v1/media/uploadMedien hochladen (Datei unter 4,5 MB oder öffentliche URL)
POST
/api/v1/media/upload-urlPresigned-URL für den direkten Upload einer großen lokalen Datei

Request-Body: Beitrag erstellen

FeldTypPflichtfeldBeschreibung
accountIdsstring[]JaKanal-IDs, auf denen gepostet wird (max. 10)
textstringNeinBeitragstext / Beschreibung
mediaUrlsstring[]NeinURLs zu Mediendateien (hochgeladen über /media/upload)
mediaTypestringNeinimage, video, reel oder carousel
scheduledAtstringNeinISO-8601-Datum mit Uhrzeit für die Planung
callbackUrlstringNeinWebhook-URL für Veröffentlichungs-Benachrichtigungen
platformConfigobjectNeinPlattformspezifische Optionen (YouTube-Titel, Datenschutz usw.)
coverImageUrlstringNeinCover-/Vorschaubild für Videos

Rate-Limits: 50 Beiträge pro Minute und Organisation. Tageslimits pro Kanal: Instagram (25), Facebook (50), TikTok (20), YouTube (100), X (300).

Callbacks: Wenn ein Beitrag veröffentlicht wird oder fehlschlägt, geht ein POST-Request an deine callbackUrl mit Beitrags-ID, Status und der externen Beitrags-URL.

OpenAPI-3.1-Spezifikation

Interaktiver Endpoint-Explorer plus maschinenlesbares JSON für Codegen, n8n, MCP.

KI-Doku · llms.txt

Markdown-Doku für Claude, ChatGPT, Cursor. Kopieren und einfügen, damit die KI korrekte API-Aufrufe erzeugt.

n8n-Node · Community-Node

Offizieller n8n-Community-Node. Konten auflisten, Beiträge erstellen und planen, Medien aus jedem n8n-Workflow hochladen. Installiere n8n-nodes-chat33 unter Settings → Community Nodes.

MCP-Server

Verbinde Claude, Cursor oder jeden MCP-Client mit Chat33. Poste, hole Analysen und baue DM-Automationen in natürlicher Sprache.

Konten deiner Nutzer verbinden

Lass deine eigenen Nutzer ihre Instagram-, Facebook-, TikTok-, YouTube-, X-, LinkedIn-, Bluesky- oder Threads-Konten über Chat33 verbinden und veröffentliche dann per API für sie

Die Developer-Connect-API stellt einen Einmal-Link aus, der einen deiner Nutzer in deinem Auftrag zum OAuth-Zustimmungsbildschirm der Plattform schickt, ohne je sein Passwort zu berühren. Sobald die Person zustimmt, verhält sich das verbundene Konto wie jedes andere in der Social-Posting-API oben: Du postest darauf, liest die Analysen, soweit die Plattform sie liefert, und trennst es wieder. Alles bezieht sich auf den Endnutzer („Profil“), dem es gehört.

So funktioniert es

  1. Erstelle ein Profil für den Nutzer (POST /v1/profiles) oder verwende eines wieder, identifiziert über deine eigene externalId.
  2. Fordere einen Connect-Link für dieses Profil und eine Plattform an (POST /v1/connect). Er ist einmal gültig, für 15 Minuten.
  3. Schick den Nutzer zur zurückgegebenen url. Die Person stimmt auf dem eigenen Bildschirm der Plattform zu, der Chat33 als anfragende App nennt. Das ist erwartet, und niemand sieht ihr Passwort.
  4. Sie landen wieder auf deiner redirectUrl mit status, profileId und accountIds (oder status=error&code=…, wenn abgebrochen wurde oder etwas schiefging: Eine abgebrochene Zustimmung verbraucht den Link nicht).

Profil erstellen

bash
curl -X POST "https://chat33.io/api/v1/profiles" \
  -H "x-api-key: sk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Acme Fitness",
    "externalId": "user_482"
  }'

Connect-Link erstellen

bash
curl -X POST "https://chat33.io/api/v1/connect" \
  -H "x-api-key: sk_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "profileId": "prof_abc123",
    "platform": "instagram",
    "redirectUrl": "https://yourapp.com/oauth/done",
    "skipIntro": false
  }'
# -> {"url": "https://chat33.io/connect/...", "expiresAt": "...", "platform": "instagram", "profileId": "prof_abc123"}
# send your user to that url
# skipIntro: true returns a url that goes straight to the platform's consent screen

Das sieht dein Nutzer

Eine von Chat33 gehostete Seite, die deine App nennt, danach der Login- und Zustimmungsbildschirm der Plattform, der Chat33 als App nennt, die den Zugriff anfragt, nicht deine App. So funktioniert das zugrunde liegende OAuth, und es ist erwartet. Der Zugriff lässt sich jederzeit bei der Plattform selbst widerrufen.

Um die Einführungsseite zu überspringen und den Nutzer direkt zum Zustimmungsbildschirm der Plattform zu schicken, übergib beim Erstellen des Links "skipIntro": true. Der Link ist dann eine sofortige Weiterleitung: derselbe Token, dieselben 15 Minuten Gültigkeit, dieselbe Rückkehr zu deiner redirectUrl. Wenn du sie überspringst, sag deinem Nutzer auf deinem eigenen Bildschirm, dass die Zustimmungsseite Chat33 nennt, und schick ihn lieber per Button-Klick statt per Link in einer E-Mail: Mail-Clients und Chat-Apps rufen Links vorab ab, und ein Vorabruf eines skipIntro-Links öffnet den Dialog der Plattform im Scanner (der Token wird dabei nicht verbraucht).

$1 pro Verbindungs-Slot und 30 Tage. Ein Slot wird aus deinem aufgeladenen Guthaben gekauft, sobald ein Konto verbunden wird (oder vorab mit Slots kaufen) und alle 30 Tage verlängert, solange das Konto verbunden bleibt. Keine anteilige Abrechnung und keine Erstattungen, aber ein Slot, der durch Trennen frei wird, bleibt bis zum Ablauf bei dir, und das nächste Konto, das du verbindest, belegt ihn. Reicht dein Guthaben nicht für eine Verlängerung, läuft das Konto 7 Tage weiter, während der Betrag als offen angezeigt wird; danach pausiert es, bis du aufladest. Pausierte Konten werden nicht berechnet.

Regeln

  • Ein echtes Konto existiert in ganz Chat33 nur einmal. Es kann kein zweites Mal verbunden werden, weder von dir noch von jemand anderem, weder über die API noch über das Chat33-Dashboard.
  • Per API verbundene Konten zählen nie auf das Kanal-Limit des Tarifs deiner Organisation.
  • Eingehende Nachrichten und Kommentare auf diesen Konten werden von Chat33 nicht gespeichert oder automatisiert (v1 kann nur veröffentlichen).
  • Facebook verbindet jede Seite, auf die die Person Zugriff gewährt; jede Seite ist ein eigenes Konto und ein eigener Slot.
  • Instagram verbindet über Instagram Login, für Business- oder Creator-Konten.
  • X-Posts über verbundene Konten ziehen ebenfalls vom Guthaben ab, genau wie Posts von Konten in deinem eigenen Dashboard.

Pausierte Konten

Ein Konto, dessen Slot 7 Tage unbezahlt blieb, wird pausiert: Das Veröffentlichen liefert 402 account_paused mit den betroffenen accountIds; es läuft automatisch weiter, wenn du aufladest. POST /v1/posts, POST /v1/posts/validate und POST /v1/posts/:id/duplicate prüfen das alle vorab, bevor etwas eingereiht wird.

json
// 402
{
  "error": "ACCOUNT_PAUSED",
  "code": "account_paused",
  "message": "These accounts are paused until outstanding connection charges are paid. Top up credits.",
  "accountIds": ["chan_abc123"]
}

API-Referenz

MethodeEndpointBeschreibung
GET
/api/v1/profilesDeine Endnutzer auflisten
POST
/api/v1/profilesEndnutzer erstellen (oder per externalId finden)
GET
/api/v1/profiles/:idProfil und seine Konten abrufen
PATCH
/api/v1/profiles/:idName oder externalId eines Profils ändern
DELETE
/api/v1/profiles/:idSeine Konten trennen und das Profil löschen
POST
/api/v1/connectEinmaligen Connect-Link für ein Profil erstellen
GET
/api/v1/accounts?source=apiAlle Konten auflisten, die deine Nutzer verbunden haben, über alle Profile
GET
/api/v1/accounts?profileId=Verbundene Konten eines Profils auflisten
DELETE
/api/v1/accounts/:idEin Konto trennen
GET
/api/v1/posts?profileId=Beiträge eines Profils auflisten
GET
/api/v1/analytics/posts?profileId=Aggregierte Analysen der Beiträge eines Profils
GET
/api/v1/billing/connectionsGuthaben, offener Betrag und Slot-Verlauf
POST
/api/v1/billing/slotsVerbindungs-Slots vorab kaufen

Du bist für die Inhalte verantwortlich, die du über die Konten deiner Nutzer veröffentlichst, und dafür, dass ihre Zustimmung vorliegt. Chat33 kann API-Keys deaktivieren, die die Plattform-Apps gefährden.

Scope aktivieren

Hole dir den Scope connect:write: Erstelle unter Einstellungen → API Keys einen Key und hake Konten deiner Nutzer verbinden an. Er ist bei jedem Key standardmäßig aus.

MMP-Install-Postbacks

Tracke App-Installs von AppsFlyer, Adjust, Branch, Tenjin oder Singular

Postback-URL

Trage diese URL in deinem MMP-Dashboard als Postback-Endpoint ein. Ersetze YOUR_SECRET durch dein MMP-Webhook-Secret aus den Einstellungen.

text
https://chat33.io/api/webhooks/mmp?secret=YOUR_SECRET

Unterstützte MMPs

AppsFlyer

Liest event_type, app_id, appsflyer_id, af_sub1/af_sub2 zur Zuordnung

Adjust

Liest activity_kind (install, rejected_install, event), label und adid aus dem Callback, GET oder POST. Für Kaufumsatz füge den Platzhalter revenue_float (nicht revenue, das in Cent ist) und currency hinzu

Branch

Liest Webhook-Events (INSTALL, PURCHASE), die Geräte-IDs in user_data und den Creator und Beitrag, die Chat33 den Link-Daten hinzufügt

Tenjin

Liest campaign_id, site_id zur Zuordnung

Singular

Liest network, source zur Zuordnung

Smart-Link-Einrichtung

Nutze den Schritt App-Download-Link senden in deinen Automationen. Er schickt iPhone-Nutzer zum App-Store-Link und Android-Nutzer zum Google-Play-Link und zählt jeden Tap in deinem Dashboard, pro Automation. Füge deinen MMP-Tracking-Link (OneLink, Adjust, Branch, Singular oder Tenjin) mit einem Kampagnennamen pro Beitrag ein, und dein MMP meldet Installs pro Beitrag. Bei Chat33-Influencer-Kampagnen werden Kontakt- und Influencer-ID automatisch an den Link angehängt.

1

Download-Schritt hinzufügen

Füge in deiner Automation App-Download-Link senden mit deinen MMP-Tracking-Links hinzu

2

MMP konfigurieren

Richte die Postback-URL in AppsFlyer, Adjust, Branch (ein Webhook für das Install-Event), Tenjin oder Singular ein

3

Installs tracken

Taps pro Automation in Chat33, Installs pro Kampagne in deinem MMP, Install-Summen in deinem Dashboard

Kein MMP? Nutze die Kampagnenlinks der Stores

Apple und Google zählen Installs pro Kampagne kostenlos. Setze in jeden Store-Link einen Kampagnennamen, einen pro Beitrag, und füge die Links in den Download-Schritt ein. Installs erscheinen etwa einen Tag später und aggregiert in App Store Connect (App-Analysen, Quellen, Kampagnen) und in der Play Console (Akquisitionsberichte nach UTM-Kampagne).

App Store: in App Store Connect generieren oder selbst bauen

text
https://apps.apple.com/app/apple-store/id<APP_ID>?pt=<PROVIDER_TOKEN>&ct=<campaign_name>&mt=8

Google Play: Die UTM-Tags kommen in den referrer, URL-codiert

text
https://play.google.com/store/apps/details?id=<PACKAGE>&referrer=utm_source%3Dchat33%26utm_medium%3Ddm%26utm_campaign%3D<campaign_name>

Schritt für Schritt: kostenloses Install-Tracking ohne MMP.

UTM-Kampagnenlink-Builder

Erzeuge getrackte URLs mit UTM-Parametern für Google Analytics

Tipp: Nutze UTM-Links in den Nachrichten deiner Chat33-Automationen. Zusammen mit dem Tracking-Pixel siehst du in Google Analytics die ganze Reise von der DM bis zur Conversion.

Hilfe bei der Integration?

Unser Team hilft dir beim Einrichten des Trackings und dabei, das Beste aus den Entwickler-Tools von Chat33 herauszuholen.