API-Referenz
Kampagnen
Eine Kampagne führt die heißen Leads einer Persona durch einen Ablauf aus Schritten, Likes, Kommentaren, Follows und DMs, alles von deinem X-Konto aus, und bringt jede Antwort in deinen Posteingang. Erstelle eine aus einer Vorlage oder deinem eigenen Ablauf, starte sie und verfolge ihre Zahlen.
- GET/v1/
campaigns - GET/v1/
campaigns/ :id - POST/v1/
campaigns - POST/v1/
campaigns/ :campaign_id/ start - POST/v1/
campaigns/ :campaign_id/ pause - POST/v1/
campaigns/ :campaign_id/ archive - POST/v1/
campaigns/ :campaign_id/ duplicate - DELETE/v1/
campaigns/ :campaign_id - GET/v1/
campaigns/ :id/ stats - GET/v1/
campaigns/ :campaign_id/ settings - PATCH/v1/
campaigns/ :campaign_id/ settings - GET/v1/
campaigns/ :campaign_id/ leads - GET/v1/
campaigns/ :campaign_id/ trends - GET/v1/
campaign_templates
Das Kampagnenobjekt
Ein Ablauf zur Kontaktaufnahme, der den heißen Leads einer Persona DMs schickt, nachfasst und die Antworten in deinen Posteingang bringt.
Attribute
- idstringEindeutige Kennung der Kampagne.
- objectstringImmer
campaign. - namestringDer Name der Kampagne.
- statusstringOb die Kampagne gerade sendet.
draftactivepausedarchived - personaobject oder nullDie Persona, deren Leads in die Kampagne kommen.
- methodstring oder nullWie die Leads der Kampagne gefunden wurden. Null bei älteren Kampagnen.
followingkeywordscompetitor_followerscompetitor_comments - min_scoreintegerLeads mit einem niedrigeren Score kommen nie in die Kampagne.
- daily_limitintegerWie viele neue Leads höchstens pro Tag in die Kampagne kommen, 5 bis 150. Standardmäßig 60.
- statsobjectSummen seit dem Start der Kampagne. Eine Antwort zählt, wenn sie innerhalb von 7 Tagen nach der ersten DM kommt.
- created_atstringWann die Kampagne erstellt wurde, ISO 8601.
- updated_atstringWann sich die Kampagne zuletzt geändert hat, ISO 8601.
{
"id": "c7RkQ2wLxe",
"object": "campaign",
"name": "Tipsters warm intro",
"status": "active",
"persona": {
"id": "lvWBPnytpS",
"name": "Tipsters"
},
"method": "keywords",
"min_score": 60,
"daily_limit": 50,
"stats": {
"leads": 640,
"dms_sent": 412,
"replies": 57,
"reply_rate": 13.8
},
"created_at": "2026-09-14T09:21:05.300Z",
"updated_at": "2026-11-06T07:45:12.904Z"
}Kampagnen auflisten
Gibt deine Kampagnen zurück, die neuesten zuerst.
Query-Parameter
- statusstringNur Kampagnen mit diesem Status.
draftactivepausedarchived - personastringNur Kampagnen dieser Persona-ID.
- limitintegerWie viele Objekte zurückgegeben werden, von 1 bis 100. Standardmäßig 25.
- cursorstringDer
next_cursorder vorherigen Seite, um die nächste Seite abzurufen. Siehe Paginierung.
Rückgabe
Eine Liste von Kampagnenobjekten.
Fehler
- Ein Parameter hat einen Wert, den die API nicht akzeptiert.
paramnennt ihn.
curl -G https://gemlead.ai/api/v1/campaigns \
-H "Authorization: Bearer $GEMLEAD_API_KEY" \
-d status=active{
"object": "list",
"data": [
{
"id": "c7RkQ2wLxe",
"object": "campaign",
"name": "Tipsters warm intro",
"status": "active",
"persona": {
"id": "lvWBPnytpS",
"name": "Tipsters"
},
"method": "keywords",
"min_score": 60,
"daily_limit": 50,
"stats": {
"leads": 640,
"dms_sent": 412,
"replies": 57,
"reply_rate": 13.8
},
"created_at": "2026-09-14T09:21:05.300Z",
"updated_at": "2026-11-06T07:45:12.904Z"
}
],
"has_more": false,
"next_cursor": null
}Kampagne abrufen
readGibt eine Kampagne zurück.
Pfadparameter
- idstringErforderlichDie ID der Kampagne.
Rückgabe
Ein Kampagnenobjekt.
Fehler
- Keine Kampagne mit dieser ID im Konto des Schlüssels.
curl https://gemlead.ai/api/v1/campaigns/c7RkQ2wLxe \
-H "Authorization: Bearer $GEMLEAD_API_KEY"{
"id": "c7RkQ2wLxe",
"object": "campaign",
"name": "Tipsters warm intro",
"status": "active",
"persona": {
"id": "lvWBPnytpS",
"name": "Tipsters"
},
"method": "keywords",
"min_score": 60,
"daily_limit": 50,
"stats": {
"leads": 640,
"dms_sent": 412,
"replies": 57,
"reply_rate": 13.8
},
"created_at": "2026-09-14T09:21:05.300Z",
"updated_at": "2026-11-06T07:45:12.904Z"
}Kampagne erstellen
Erstellt eine Kampagne als Entwurf. Es wird nichts gesendet, bis du sie startest. Ohne template oder flow bekommt die Kampagne die Standardvorlage der App, den Aufwärm-Ablauf für B2B und den Sofort-Ablauf für B2C.
Body-Parameter
- persona_idstringErforderlichDie Persona, deren Leads in sie kommen.
- namestringErforderlichDer Name der Kampagne, bis zu 100 Zeichen.
- methodstringNur Leads, die auf diese Weise gefunden wurden, kommen hinein. Lass den Parameter weg, um alle Leads der Persona aufzunehmen.
followingkeywordscompetitor_followerscompetitor_comments - min_scoreintegerNur Leads mit mindestens diesem Score kommen hinein, 0 bis 100. Standardmäßig 60.
- daily_limitintegerWie viele neue Leads höchstens pro Tag hineinkommen, 5 bis 150. Standardmäßig 60. Jeder neue Lead beginnt mit Radar, das ihn zu einer privaten X-Liste des Kontos hinzufügt, und ab einigen Hundert pro Tag blockiert X solche Hinzufügungen für 6 bis 24 Stunden.
- lead_orderstringWelche Leads zuerst hineinkommen. Standardmäßig
highest, bei den Methoden Keyword und Konkurrenznewest.highestlowestshufflenewest - templatestringDer Ablauf als Ausgangspunkt. Siehe Kampagnenvorlagen auflisten. Nicht zusammen mit
flow.warm_upinstantdirect_messageblank - flowobjectDein eigener Ablauf statt einer Vorlage.
Rückgabe
Das neue Kampagnenobjekt, mit dem Wert draft in status.
Fehler
- Ein Pflichtparameter fehlt.
paramnennt ihn. - Ein Parameter hat einen Wert, den die API nicht akzeptiert.
paramnennt ihn. - Der Body enthält ein Feld, das dieser Endpoint nicht akzeptiert.
- Keine Persona mit dieser
persona_idim Konto des Schlüssels.
curl -X POST https://gemlead.ai/api/v1/campaigns \
-H "Authorization: Bearer $GEMLEAD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"persona_id": "lvWBPnytpS",
"name": "Tipsters warm intro",
"method": "keywords",
"daily_limit": 50,
"template": "instant"
}'{
"id": "c7RkQ2wLxe",
"object": "campaign",
"name": "Tipsters warm intro",
"status": "draft",
"persona": {
"id": "lvWBPnytpS",
"name": "Tipsters"
},
"method": "keywords",
"min_score": 60,
"daily_limit": 50,
"stats": {
"leads": 0,
"dms_sent": 0,
"replies": 0,
"reply_rate": null
},
"created_at": "2026-09-14T09:21:05.300Z",
"updated_at": "2026-11-06T07:45:12.904Z"
}Kampagne starten
Startet einen Entwurf oder setzt eine pausierte Kampagne fort. Leads kommen hinein, und die Schritte werden von deinem X-Konto aus ausgeführt.
Pfadparameter
- campaign_idstringErforderlichDie ID der Kampagne.
Rückgabe
Das Kampagnenobjekt, mit dem Wert active in status.
Fehler
- Keine Kampagne mit dieser ID im Konto des Schlüssels.
- Die Kampagne ist archiviert. Dupliziere sie, um sie erneut laufen zu lassen.
- Der Ablauf hat noch keinen Schritt.
curl -X POST \
https://gemlead.ai/api/v1/campaigns/c7RkQ2wLxe/start \
-H "Authorization: Bearer $GEMLEAD_API_KEY"{
"id": "c7RkQ2wLxe",
"object": "campaign",
"name": "Tipsters warm intro",
"status": "active",
"persona": {
"id": "lvWBPnytpS",
"name": "Tipsters"
},
"method": "keywords",
"min_score": 60,
"daily_limit": 50,
"stats": {
"leads": 640,
"dms_sent": 412,
"replies": 57,
"reply_rate": 13.8
},
"created_at": "2026-09-14T09:21:05.300Z",
"updated_at": "2026-11-06T07:45:12.904Z"
}Kampagne pausieren
Pausiert eine Kampagne. Bis du sie wieder startest, wird kein neuer Schritt ausgeführt, und die Leads behalten ihren Platz.
Pfadparameter
- campaign_idstringErforderlichDie ID der Kampagne.
Rückgabe
Das Kampagnenobjekt, mit dem Wert paused in status.
Fehler
- Keine Kampagne mit dieser ID im Konto des Schlüssels.
- Die Kampagne ist archiviert. Dupliziere sie, um sie erneut laufen zu lassen.
- Die Kampagne ist ein Entwurf, es gibt nichts zu pausieren.
curl -X POST \
https://gemlead.ai/api/v1/campaigns/c7RkQ2wLxe/pause \
-H "Authorization: Bearer $GEMLEAD_API_KEY"{
"id": "c7RkQ2wLxe",
"object": "campaign",
"name": "Tipsters warm intro",
"status": "paused",
"persona": {
"id": "lvWBPnytpS",
"name": "Tipsters"
},
"method": "keywords",
"min_score": 60,
"daily_limit": 50,
"stats": {
"leads": 640,
"dms_sent": 412,
"replies": 57,
"reply_rate": 13.8
},
"created_at": "2026-09-14T09:21:05.300Z",
"updated_at": "2026-11-06T07:45:12.904Z"
}Kampagne archivieren
Beendet eine Kampagne endgültig. Ihr Verlauf und ihre Unterhaltungen bleiben erhalten. Mit Kampagne duplizieren lässt du sie erneut laufen.
Pfadparameter
- campaign_idstringErforderlichDie ID der Kampagne.
Rückgabe
Das Kampagnenobjekt, mit dem Wert archived in status.
Fehler
- Keine Kampagne mit dieser ID im Konto des Schlüssels.
curl -X POST \
https://gemlead.ai/api/v1/campaigns/c7RkQ2wLxe/archive \
-H "Authorization: Bearer $GEMLEAD_API_KEY"{
"id": "c7RkQ2wLxe",
"object": "campaign",
"name": "Tipsters warm intro",
"status": "archived",
"persona": {
"id": "lvWBPnytpS",
"name": "Tipsters"
},
"method": "keywords",
"min_score": 60,
"daily_limit": 50,
"stats": {
"leads": 640,
"dms_sent": 412,
"replies": 57,
"reply_rate": 13.8
},
"created_at": "2026-09-14T09:21:05.300Z",
"updated_at": "2026-11-06T07:45:12.904Z"
}Kampagne duplizieren
Kopiert Einstellungen und Ablauf einer Kampagne ohne ihre Leads in einen neuen Entwurf.
Pfadparameter
- campaign_idstringErforderlichDie ID der Kampagne.
Rückgabe
Das neue Kampagnenobjekt, mit dem Wert draft in status.
Fehler
- Keine Kampagne mit dieser ID im Konto des Schlüssels.
curl -X POST \
https://gemlead.ai/api/v1/campaigns/c7RkQ2wLxe/duplicate \
-H "Authorization: Bearer $GEMLEAD_API_KEY"{
"id": "c2VbN6mQrz",
"object": "campaign",
"name": "Tipsters warm intro copy",
"status": "draft",
"persona": {
"id": "lvWBPnytpS",
"name": "Tipsters"
},
"method": "keywords",
"min_score": 60,
"daily_limit": 50,
"stats": {
"leads": 0,
"dms_sent": 0,
"replies": 0,
"reply_rate": null
},
"created_at": "2026-11-06T07:45:12.904Z",
"updated_at": "2026-11-06T07:45:12.904Z"
}Kampagne löschen
Löscht eine Kampagne. Ihre Leads und deren Unterhaltungen bleiben. Das lässt sich nicht rückgängig machen.
Pfadparameter
- campaign_idstringErforderlichDie ID der Kampagne.
Rückgabe
Ein Objekt mit der id der Kampagne und dem Wert true in deleted.
Fehler
- Keine Kampagne mit dieser ID im Konto des Schlüssels.
curl -X DELETE \
https://gemlead.ai/api/v1/campaigns/c7RkQ2wLxe \
-H "Authorization: Bearer $GEMLEAD_API_KEY"{
"id": "c7RkQ2wLxe",
"object": "campaign",
"deleted": true
}Das Statistikobjekt
Die Ergebnisse einer Kampagne über einen Zeitraum, insgesamt und Tag für Tag.
Attribute
- objectstringImmer
campaign_stats. - campaign_idstringDie ID der Kampagne.
- fromstringDer erste Tag,
YYYY-MM-DD. - tostringDer letzte Tag,
YYYY-MM-DD. - totalsobject
leads_added,dms_sent,repliesundreply_rateim Zeitraum. - dailyArray von objectsEin Eintrag pro Tag mit
date,dms_sentundreplies.
{
"object": "campaign_stats",
"campaign_id": "c7RkQ2wLxe",
"from": "2026-10-08",
"to": "2026-11-06",
"totals": {
"leads_added": 640,
"dms_sent": 412,
"replies": 57,
"reply_rate": 13.8
},
"daily": [
{
"date": "2026-11-04",
"dms_sent": 22,
"replies": 3
},
{
"date": "2026-11-05",
"dms_sent": 25,
"replies": 4
},
{
"date": "2026-11-06",
"dms_sent": 9,
"replies": 1
}
]
}Kampagnenstatistiken abrufen
Gibt die Ergebnisse einer Kampagne über einen Zeitraum zurück, insgesamt und Tag für Tag. dms_sent zählt die ersten DMs im Zeitraum, replies die Antworten dieser Leads innerhalb von 7 Tagen. Tage sind UTC-Daten.
Pfadparameter
- idstringErforderlichDie ID der Kampagne.
Query-Parameter
- fromstringDer erste Tag,
YYYY-MM-DD. Standardmäßig vor 30 Tagen. - tostringDer letzte Tag,
YYYY-MM-DD. Standardmäßig heute.
Rückgabe
Ein Statistikobjekt.
Fehler
- Keine Kampagne mit dieser ID im Konto des Schlüssels.
- Ein Parameter hat einen Wert, den die API nicht akzeptiert.
paramnennt ihn.
curl -G https://gemlead.ai/api/v1/campaigns/c7RkQ2wLxe/stats \
-H "Authorization: Bearer $GEMLEAD_API_KEY" \
-d from=2026-10-08 \
-d to=2026-11-06{
"object": "campaign_stats",
"campaign_id": "c7RkQ2wLxe",
"from": "2026-10-08",
"to": "2026-11-06",
"totals": {
"leads_added": 640,
"dms_sent": 412,
"replies": 57,
"reply_rate": 13.8
},
"daily": [
{
"date": "2026-11-04",
"dms_sent": 22,
"replies": 3
},
{
"date": "2026-11-05",
"dms_sent": 25,
"replies": 4
},
{
"date": "2026-11-06",
"dms_sent": 9,
"replies": 1
}
]
}Das Einstellungsobjekt
Die Einstellungen einer Kampagne und ihr ganzer Ablauf, jeder Schritt mit seiner ID und seinen Optionen.
Attribute
- objectstringImmer
campaign_settings. - campaign_idstringDie ID der Kampagne.
- persona_idstring oder nullDie Persona, deren Leads in sie kommen.
- namestringDer Name der Kampagne.
- statusstringDer Stand der Kampagne.
draftactivepausedarchived - methodstring oder nullNur Leads, die auf diese Weise gefunden wurden, kommen hinein.
nulllässt alle Leads der Persona hinein.followingkeywordscompetitor_followerscompetitor_comments - min_scoreintegerNur Leads mit mindestens diesem Score kommen hinein, 0 bis 100.
- daily_limitintegerHöchstzahl neuer Leads pro Tag, 5 bis 150.
- lead_orderstringWelche Leads zuerst hineinkommen.
highestnach höchstem Score,lowest,shuffleodernewestnach jüngstem Fund.highestlowestshufflenewest - flowobjectIhr Ablauf.
- updated_atstringLetzte Änderung, ISO 8601.
{
"object": "campaign_settings",
"campaign_id": "c7RkQ2wLxe",
"persona_id": "lvWBPnytpS",
"name": "Tipsters warm intro",
"status": "active",
"method": "keywords",
"min_score": 60,
"daily_limit": 50,
"lead_order": "newest",
"flow": {
"steps": [
{
"id": "in-like",
"type": "like",
"label": "Like",
"count": 1
},
{
"id": "in-follow",
"type": "follow",
"label": "Follow"
},
{
"id": "in-timer",
"type": "timer",
"label": "Timer",
"duration": "1d"
},
{
"id": "in-inbox",
"type": "can_dm",
"label": "Inbox opened test",
"if_yes": [
{
"id": "in-dm",
"type": "send_dm",
"label": "Direct message",
"mode": "ai",
"dm_kind": "cold",
"language": "auto",
"instructions": null,
"template": null
},
{
"id": "in-comment-bridge",
"type": "comment",
"label": "Comment",
"comment_type": "bridge",
"language": "auto",
"instructions": null
}
],
"if_no": [
{
"id": "in-comment-closed",
"type": "comment",
"label": "Comment",
"comment_type": "inbox_closed",
"language": "auto",
"instructions": null
}
]
},
{
"id": "in-timer-followup",
"type": "timer",
"label": "Timer",
"duration": "3d"
},
{
"id": "in-dm-followup",
"type": "send_dm",
"label": "Direct message",
"mode": "ai",
"dm_kind": "follow_up",
"language": "auto",
"instructions": null,
"template": null
},
{
"id": "in-cleaner",
"type": "cleaner",
"label": "Cleaner",
"unfollow": true,
"delete_comments": true,
"delete_likes": true
}
]
},
"updated_at": "2026-11-06T07:45:12.904Z"
}Kampagneneinstellungen abrufen
Gibt die Einstellungen einer Kampagne und ihren Ablauf zurück, jeden Schritt mit seiner ID und seinen Optionen. Lies sie, bevor du den Ablauf bearbeitest.
Pfadparameter
- campaign_idstringErforderlichDie ID der Kampagne.
Rückgabe
Ein Einstellungsobjekt.
Fehler
- Keine Kampagne mit dieser ID im Konto des Schlüssels.
curl https://gemlead.ai/api/v1/campaigns/c7RkQ2wLxe/settings \
-H "Authorization: Bearer $GEMLEAD_API_KEY"{
"object": "campaign_settings",
"campaign_id": "c7RkQ2wLxe",
"persona_id": "lvWBPnytpS",
"name": "Tipsters warm intro",
"status": "active",
"method": "keywords",
"min_score": 60,
"daily_limit": 50,
"lead_order": "newest",
"flow": {
"steps": [
{
"id": "in-like",
"type": "like",
"label": "Like",
"count": 1
},
{
"id": "in-follow",
"type": "follow",
"label": "Follow"
},
{
"id": "in-timer",
"type": "timer",
"label": "Timer",
"duration": "1d"
},
{
"id": "in-inbox",
"type": "can_dm",
"label": "Inbox opened test",
"if_yes": [
{
"id": "in-dm",
"type": "send_dm",
"label": "Direct message",
"mode": "ai",
"dm_kind": "cold",
"language": "auto",
"instructions": null,
"template": null
},
{
"id": "in-comment-bridge",
"type": "comment",
"label": "Comment",
"comment_type": "bridge",
"language": "auto",
"instructions": null
}
],
"if_no": [
{
"id": "in-comment-closed",
"type": "comment",
"label": "Comment",
"comment_type": "inbox_closed",
"language": "auto",
"instructions": null
}
]
},
{
"id": "in-timer-followup",
"type": "timer",
"label": "Timer",
"duration": "3d"
},
{
"id": "in-dm-followup",
"type": "send_dm",
"label": "Direct message",
"mode": "ai",
"dm_kind": "follow_up",
"language": "auto",
"instructions": null,
"template": null
},
{
"id": "in-cleaner",
"type": "cleaner",
"label": "Cleaner",
"unfollow": true,
"delete_comments": true,
"delete_likes": true
}
]
},
"updated_at": "2026-11-06T07:45:12.904Z"
}Kampagneneinstellungen ändern
Ändert die Einstellungen, die du sendest, und behält die anderen. Ein flow ersetzt den ganzen Ablauf, auch bei einer laufenden Kampagne. Behalte die IDs der Schritte, die bleiben sollen, dann bleiben die Leads dort, die auf ihnen warten, und die App verschiebt die anderen.
Pfadparameter
- campaign_idstringErforderlichDie ID der Kampagne.
Body-Parameter
- namestringDer Name der Kampagne, bis zu 100 Zeichen.
- methodstring oder nullNur Leads, die auf diese Weise gefunden wurden, kommen hinein,
nullfür alle Leads der Persona.followingkeywordscompetitor_followerscompetitor_comments - min_scoreintegerNur Leads mit mindestens diesem Score kommen hinein, 0 bis 100.
- daily_limitintegerHöchstzahl neuer Leads pro Tag, 5 bis 150.
- lead_orderstringWelche Leads zuerst hineinkommen.
highestnach höchstem Score,lowest,shuffleodernewestnach jüngstem Fund.highestlowestshufflenewest - flowobjectDer neue Ablauf, vollständig.
Rückgabe
Das aktualisierte Einstellungsobjekt.
Fehler
- Keine Kampagne mit dieser ID im Konto des Schlüssels.
- Ein Parameter hat einen Wert, den die API nicht akzeptiert.
paramnennt ihn. - Der Body enthält ein Feld, das dieser Endpoint nicht akzeptiert.
- Du hast den Ablauf einer archivierten Kampagne geändert. Dupliziere sie stattdessen.
curl -X PATCH \
https://gemlead.ai/api/v1/campaigns/c7RkQ2wLxe/settings \
-H "Authorization: Bearer $GEMLEAD_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"daily_limit": 80,
"min_score": 70
}'{
"object": "campaign_settings",
"campaign_id": "c7RkQ2wLxe",
"persona_id": "lvWBPnytpS",
"name": "Tipsters warm intro",
"status": "active",
"method": "keywords",
"min_score": 70,
"daily_limit": 80,
"lead_order": "newest",
"flow": {
"steps": [
{
"id": "in-like",
"type": "like",
"label": "Like",
"count": 1
},
{
"id": "in-follow",
"type": "follow",
"label": "Follow"
},
{
"id": "in-timer",
"type": "timer",
"label": "Timer",
"duration": "1d"
},
{
"id": "in-inbox",
"type": "can_dm",
"label": "Inbox opened test",
"if_yes": [
{
"id": "in-dm",
"type": "send_dm",
"label": "Direct message",
"mode": "ai",
"dm_kind": "cold",
"language": "auto",
"instructions": null,
"template": null
},
{
"id": "in-comment-bridge",
"type": "comment",
"label": "Comment",
"comment_type": "bridge",
"language": "auto",
"instructions": null
}
],
"if_no": [
{
"id": "in-comment-closed",
"type": "comment",
"label": "Comment",
"comment_type": "inbox_closed",
"language": "auto",
"instructions": null
}
]
},
{
"id": "in-timer-followup",
"type": "timer",
"label": "Timer",
"duration": "3d"
},
{
"id": "in-dm-followup",
"type": "send_dm",
"label": "Direct message",
"mode": "ai",
"dm_kind": "follow_up",
"language": "auto",
"instructions": null,
"template": null
},
{
"id": "in-cleaner",
"type": "cleaner",
"label": "Cleaner",
"unfollow": true,
"delete_comments": true,
"delete_likes": true
}
]
},
"updated_at": "2026-11-06T07:45:12.904Z"
}Das Ablaufobjekt
Die Schritte, die eine Kampagne für jeden Lead der Reihe nach ausführt. Eine Verzweigung führt if_yes oder if_no aus, danach die Schritte, die auf sie folgen. Ein Ablauf hat höchstens 60 Schritte, Verzweigungen sind höchstens 2 Ebenen tief verschachtelt, und Schritt-IDs sind eindeutig. Ein Schritt nimmt nur die Optionen seines Typs an. Jedes Like, jeder Kommentar, jedes Follow und jede DM wird von deinem X-Konto aus gesendet. Das Canvas in der App ordnet den Ablauf genauso an wie die Vorlagen der App.
Attribute
- stepsArray von objectsErforderlichDie Schritte, der Reihe nach.
{
"steps": [
{
"id": "in-like",
"type": "like",
"label": "Like",
"count": 1
},
{
"id": "in-follow",
"type": "follow",
"label": "Follow"
},
{
"id": "in-timer",
"type": "timer",
"label": "Timer",
"duration": "1d"
},
{
"id": "in-inbox",
"type": "can_dm",
"label": "Inbox opened test",
"if_yes": [
{
"id": "in-dm",
"type": "send_dm",
"label": "Direct message",
"mode": "ai",
"dm_kind": "cold",
"language": "auto",
"instructions": null,
"template": null
},
{
"id": "in-comment-bridge",
"type": "comment",
"label": "Comment",
"comment_type": "bridge",
"language": "auto",
"instructions": null
}
],
"if_no": [
{
"id": "in-comment-closed",
"type": "comment",
"label": "Comment",
"comment_type": "inbox_closed",
"language": "auto",
"instructions": null
}
]
},
{
"id": "in-timer-followup",
"type": "timer",
"label": "Timer",
"duration": "3d"
},
{
"id": "in-dm-followup",
"type": "send_dm",
"label": "Direct message",
"mode": "ai",
"dm_kind": "follow_up",
"language": "auto",
"instructions": null,
"template": null
},
{
"id": "in-cleaner",
"type": "cleaner",
"label": "Cleaner",
"unfollow": true,
"delete_comments": true,
"delete_likes": true
}
]
}Das Kampagnen-Lead-Objekt
Ein Lead in einer Kampagne, der Schritt, auf dem er steht, und was die Kampagne für ihn gepostet hat.
Attribute
- objectstringImmer
campaign_lead. - idstring oder nullEindeutige Kennung des Durchlaufs des Leads in dieser Kampagne.
- campaign_idstringDie ID der Kampagne.
- lead_idstring oder nullDie ID des Leads.
- statusstringDer Status des Leads in der Kampagne, etwa
waiting,replied,completedoderfailed. - stepstring oder nullDie Bezeichnung des Schritts, auf dem er steht.
- entered_atstring oder nullWann er in die Kampagne kam, ISO 8601.
- leadobject oder nullDer Lead.
- postedobjectWas für diesen Lead gesendet wurde.
{
"object": "campaign_lead",
"id": "cl9TzQ4wKa",
"campaign_id": "c7RkQ2wLxe",
"lead_id": "msgOtJ8dvT",
"status": "replied",
"step": "Direct message",
"entered_at": "2026-11-05T15:00:08.000Z",
"lead": {
"id": "msgOtJ8dvT",
"object": "lead",
"profile": {
"x_user_id": "1460283925",
"username": "jane_builds",
"name": "Jane Doe",
"bio": "Runs a paid trading community. Daily setups, no hype.",
"followers_count": 12400,
"following_count": 380,
"location": "Austin, TX",
"website": "https://janedoe.com",
"profile_image_url": "https://pbs.twimg.com/profile_images/1460283925/jane_400x400.jpg",
"verified": true,
"url": "https://x.com/jane_builds"
},
"score": 86,
"score_reason": "Runs a paid trading community and asks how to collect payments for it.",
"hot": true,
"status": "scored",
"persona": {
"id": "lvWBPnytpS",
"name": "Tipsters"
},
"campaign": null,
"conversation_id": null,
"locked_to": null,
"found_at": "2026-11-05T14:02:11.482Z",
"scored_at": "2026-11-05T14:03:40.117Z",
"updated_at": "2026-11-05T14:03:40.117Z",
"metadata": {}
},
"posted": {
"comments": [],
"dms": [
{
"text": "Hey Jane, saw you want a real checkout for your picks. Want to see how others charge for their Discord?",
"message_id": "1985300011122233344",
"at": "2026-11-06T07:58:21.000Z"
}
]
}
}Kampagnen-Leads auflisten
Gibt die Leads einer Kampagne nach ihrer Position im Ablauf zurück, mit dem, was die Kampagne für jeden gepostet hat.
Pfadparameter
- campaign_idstringErforderlichDie ID der Kampagne.
Query-Parameter
- stagestring
allsind alle Leads, die hineingekommen sind.stepsind die, die den Schrittstep_idpassiert haben,forkdie, die einen seiner Zweige genommen haben.dm_sent,replied,finishedfür abgeschlossen oder geantwortet,completed, wenn alle Schritte ohne Antwort durchlaufen sind. Standardmäßigall.allstepforkdm_sentrepliedfinishedcompleted - step_idstringBei
stepoderforkdie ID des Schritts. - branchstringBei
forkder Zweig.yesno - skippedbooleanBei
stepauf einem Kommentar- oder DM-Schritt die Leads, für die er nichts gepostet hat. - qstringSuche nach Name oder Nutzername.
- limitintegerWie viele Objekte zurückgegeben werden, von 1 bis 100. Standardmäßig 25.
- cursorstringDer
next_cursorder vorherigen Seite, um die nächste Seite abzurufen. Siehe Paginierung.
Rückgabe
Eine Liste von Kampagnen-Lead-Objekten, mit total_count.
Fehler
- Keine Kampagne mit dieser ID im Konto des Schlüssels.
- Ein Parameter hat einen Wert, den die API nicht akzeptiert.
paramnennt ihn.
curl -G https://gemlead.ai/api/v1/campaigns/c7RkQ2wLxe/leads \
-H "Authorization: Bearer $GEMLEAD_API_KEY" \
-d stage=replied{
"object": "list",
"data": [
{
"object": "campaign_lead",
"id": "cl9TzQ4wKa",
"campaign_id": "c7RkQ2wLxe",
"lead_id": "msgOtJ8dvT",
"status": "replied",
"step": "Direct message",
"entered_at": "2026-11-05T15:00:08.000Z",
"lead": {
"id": "msgOtJ8dvT",
"object": "lead",
"profile": {
"x_user_id": "1460283925",
"username": "jane_builds",
"name": "Jane Doe",
"bio": "Runs a paid trading community. Daily setups, no hype.",
"followers_count": 12400,
"following_count": 380,
"location": "Austin, TX",
"website": "https://janedoe.com",
"profile_image_url": "https://pbs.twimg.com/profile_images/1460283925/jane_400x400.jpg",
"verified": true,
"url": "https://x.com/jane_builds"
},
"score": 86,
"score_reason": "Runs a paid trading community and asks how to collect payments for it.",
"hot": true,
"status": "scored",
"persona": {
"id": "lvWBPnytpS",
"name": "Tipsters"
},
"campaign": null,
"conversation_id": null,
"locked_to": null,
"found_at": "2026-11-05T14:02:11.482Z",
"scored_at": "2026-11-05T14:03:40.117Z",
"updated_at": "2026-11-05T14:03:40.117Z",
"metadata": {}
},
"posted": {
"comments": [],
"dms": [
{
"text": "Hey Jane, saw you want a real checkout for your picks. Want to see how others charge for their Discord?",
"message_id": "1985300011122233344",
"at": "2026-11-06T07:58:21.000Z"
}
]
}
}
],
"has_more": true,
"next_cursor": "eyJzIjoiMjAyNi0xMS0wNVQxNDowMzo0MC4xMTdaIn0",
"total_count": 57
}Das Trendobjekt
Die Aktivität einer Kampagne pro Tag über 14 Tage oder pro Stunde über 24 Stunden, wie in ihrem Diagramm in der App.
Attribute
- objectstringImmer
campaign_trends. - campaign_idstringDie ID der Kampagne.
- rangestringDer Zeitraum.
14d24h - timezonestringDie Zeitzone der Zeitfenster.
- bucketsArray von objectsEin Eintrag pro Tag oder pro Stunde, jeweils mit
keyund den angefragten Metriken. - totalsobjectSeit dem Start der Kampagne ihre Werte
started,sent,repliesundfollows, mitlast_sent_atundlast_reply_at. - truncatedboolean
true, wenn die Kampagne zu groß ist, um vollständig gezählt zu werden. - generated_atstringWann die Zahlen gelesen wurden, ISO 8601.
{
"object": "campaign_trends",
"campaign_id": "c7RkQ2wLxe",
"range": "14d",
"timezone": "Europe/Paris",
"buckets": [
{
"key": "2026-11-04",
"started": 48,
"sent": 22,
"replies": 3,
"follows": 9
},
{
"key": "2026-11-05",
"started": 50,
"sent": 25,
"replies": 4,
"follows": 11
},
{
"key": "2026-11-06",
"started": 21,
"sent": 9,
"replies": 1,
"follows": 4
}
],
"totals": {
"started": 640,
"sent": 412,
"replies": 57,
"follows": 133,
"last_sent_at": "2026-11-06T08:20:03.000Z",
"last_reply_at": "2026-11-06T08:12:44.000Z"
},
"truncated": false,
"generated_at": "2026-11-06T08:30:00.000Z"
}Kampagnentrends abrufen
Gibt die gestarteten Leads, gesendeten DMs, Antworten und Follows einer Kampagne zurück, pro Tag über 14 Tage oder pro Stunde über 24 Stunden.
Pfadparameter
- campaign_idstringErforderlichDie ID der Kampagne.
Query-Parameter
- metricsstringEine Auswahl aus
started,sent,repliesundfollows, durch Kommas getrennt. Standardmäßig alle vier.startedsentrepliesfollows - rangestring
14dpro Tag,24hpro Stunde. Standardmäßig14d.14d24h - timezonestringDie IANA-Zeitzone der Zeitfenster, etwa
Europe/Paris. Standardmäßig UTC.
Rückgabe
Ein Trendobjekt.
Fehler
- Keine Kampagne mit dieser ID im Konto des Schlüssels.
- Ein Parameter hat einen Wert, den die API nicht akzeptiert.
paramnennt ihn.
curl -G \
https://gemlead.ai/api/v1/campaigns/c7RkQ2wLxe/trends \
-H "Authorization: Bearer $GEMLEAD_API_KEY" \
-d range=14d \
--data-urlencode "timezone=Europe/Paris"{
"object": "campaign_trends",
"campaign_id": "c7RkQ2wLxe",
"range": "14d",
"timezone": "Europe/Paris",
"buckets": [
{
"key": "2026-11-04",
"started": 48,
"sent": 22,
"replies": 3,
"follows": 9
},
{
"key": "2026-11-05",
"started": 50,
"sent": 25,
"replies": 4,
"follows": 11
},
{
"key": "2026-11-06",
"started": 21,
"sent": 9,
"replies": 1,
"follows": 4
}
],
"totals": {
"started": 640,
"sent": 412,
"replies": 57,
"follows": 133,
"last_sent_at": "2026-11-06T08:20:03.000Z",
"last_reply_at": "2026-11-06T08:12:44.000Z"
},
"truncated": false,
"generated_at": "2026-11-06T08:30:00.000Z"
}Das Vorlagenobjekt
Ein Ablauf als Ausgangspunkt für eine Kampagne, so wie die App ihn anbietet. Der Ablauf jeder Vorlage ist ein gültiger Ablauf für Kampagne erstellen.
Attribute
- objectstringImmer
campaign_template. - idstringDie ID der Vorlage, für den Parameter
template.warm_upinstantdirect_messageblank - descriptionstringWas der Ablauf tut, in wenigen Sätzen.
- defaultbooleanOb die App sie für diese Methode und diesen Markt wählt.
- flowobjectIhr Ablauf.
{
"object": "campaign_template",
"id": "direct_message",
"description": "Radar waits until they are online, then the message. No warm up.",
"default": false,
"flow": {
"steps": [
{
"id": "dm-snapshot",
"type": "snapshot",
"label": "Radar"
},
{
"id": "dm-send",
"type": "send_dm",
"label": "Direct message",
"mode": "ai",
"dm_kind": "cold",
"language": "auto",
"instructions": null,
"template": null
}
]
}
}Kampagnenvorlagen auflisten
Gibt die Vorlagen der App mit ihren vollständigen Abläufen zurück, die beste Referenz für jeden Schritttyp und jede Option. Der Aufwärm-Ablauf likt, kommentiert und folgt vor der DM. Der Sofort-Ablauf erledigt das alles sofort und schickt die DM einen Tag später. Die Vorlage Direktnachricht sendet nur die DM.
Query-Parameter
- methodstringDie Methode der Kampagne. Der Sofort-Ablauf hängt davon ab.
followingkeywordscompetitor_followerscompetitor_comments - marketstringDer Markt der Persona. Bei
b2csendet die Vorlage Direktnachricht sofort, ohne Radar.b2bb2c
Rückgabe
Eine Liste von Vorlagenobjekten.
Fehler
- Ein Parameter hat einen Wert, den die API nicht akzeptiert.
paramnennt ihn.
curl -G https://gemlead.ai/api/v1/campaign_templates \
-H "Authorization: Bearer $GEMLEAD_API_KEY" \
-d method=following \
-d market=b2b{
"object": "list",
"data": [
{
"object": "campaign_template",
"id": "direct_message",
"description": "Radar waits until they are online, then the message. No warm up.",
"default": false,
"flow": {
"steps": [
{
"id": "dm-snapshot",
"type": "snapshot",
"label": "Radar"
},
{
"id": "dm-send",
"type": "send_dm",
"label": "Direct message",
"mode": "ai",
"dm_kind": "cold",
"language": "auto",
"instructions": null,
"template": null
}
]
}
}
],
"has_more": false,
"next_cursor": null
}