API-referentie

Campagnes

Een campagne leidt de hete leads van een persona door een flow van stappen, likes, reacties, follows en DM's, allemaal vanaf je X-account, en zet elk antwoord in je inbox. Maak er een op basis van een template of je eigen flow, start hem en volg de cijfers.

Het campagne-object

Een outreach-flow die DM's stuurt naar de hete leads van een persona, follow-ups verstuurt en antwoorden in je inbox zet.

Attributen

  • idstring
    Unieke ID van de campagne.
  • objectstring
    Altijd campaign.
  • namestring
    De naam van de campagne.
  • statusstring
    Of de campagne aan het versturen is.
    draftactivepausedarchived
  • personaobject of null
    De persona waarvan de leads in de campagne komen.
  • methodstring of null
    Hoe de leads van de campagne zijn gevonden. Null bij oudere campagnes.
    followingkeywordscompetitor_followerscompetitor_comments
  • min_scoreinteger
    Leads met een lagere score komen nooit in de campagne.
  • daily_limitinteger
    Het maximale aantal nieuwe leads dat per dag in de campagne komt, 5 tot 150. Standaard 60.
  • statsobject
    Totalen sinds de start van de campagne. Een antwoord telt als het binnen 7 dagen na de eerste DM komt.
  • created_atstring
    Wanneer de campagne is gemaakt, in ISO 8601.
  • updated_atstring
    Wanneer de campagne voor het laatst is gewijzigd, in ISO 8601.
Het campagne-object
{
  "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"
}

Campagnes opvragen

GET/v1/campaignsScope readMCPlist_campaigns

Geeft je campagnes terug, nieuwste eerst.

Queryparameters

  • statusstring
    Alleen campagnes met deze status.
    draftactivepausedarchived
  • personastring
    Alleen campagnes van de persona met deze ID.
  • limitinteger
    Hoeveel objecten je terugkrijgt, van 1 tot 100. Standaard 25.
  • cursorstring
    De next_cursor van de vorige pagina, om de pagina daarna op te halen. Zie Paginering.

Resultaat

Een lijst van campagne-objecten.

Fouten

  • Een parameter heeft een waarde die de API niet accepteert. param geeft aan welke.
GET/v1/campaigns
curl -G https://gemlead.ai/api/v1/campaigns \
  -H "Authorization: Bearer $GEMLEAD_API_KEY" \
  -d status=active
Response200
{
  "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
}

Een campagne ophalen

GET/v1/campaigns/:idScope read

Geeft één campagne terug.

Padparameters

  • idstringVerplicht
    De ID van de campagne.

Resultaat

Een campagne-object.

Fouten

GET/v1/campaigns/:id
curl https://gemlead.ai/api/v1/campaigns/c7RkQ2wLxe \
  -H "Authorization: Bearer $GEMLEAD_API_KEY"
Response200
{
  "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"
}

Een campagne maken

POST/v1/campaignsScope writeMCPcreate_campaign

Maakt een campagne aan als concept. Er gaat niets de deur uit tot je hem start. Zonder template of flow krijgt de campagne de standaard van de app, de Warm-up-flow voor B2B en de Directe flow voor B2C.

Bodyparameters

  • persona_idstringVerplicht
    De persona waarvan de leads erin komen.
  • namestringVerplicht
    De naam van de campagne, maximaal 100 tekens.
  • methodstring
    Alleen leads die op deze manier zijn gevonden, komen erin. Laat dit weg om alle leads van de persona toe te laten.
    followingkeywordscompetitor_followerscompetitor_comments
  • min_scoreinteger
    Alleen leads met minstens deze score komen erin, 0 tot 100. Standaard 60.
  • daily_limitinteger
    Het maximale aantal nieuwe leads dat per dag instroomt, 5 tot 150. Standaard 60. Elke nieuwe lead begint met Radar, die hem op X toevoegt aan een privélijst van het account, en boven een paar honderd per dag blokkeert X die toevoegingen 6 tot 24 uur.
  • lead_orderstring
    Welke leads er het eerst in komen. Standaard highest, of newest bij de zoekwoord- en concurrentmethodes.
    highestlowestshufflenewest
  • templatestring
    De flow om mee te beginnen. Zie Campagnetemplates opvragen. Niet samen met flow.
    warm_upinstantdirect_messageblank
  • flowobject
    Je eigen flow, in plaats van een template.

Resultaat

Het nieuwe campagne-object, met status op draft.

Fouten

  • Er ontbreekt een verplichte parameter. param geeft aan welke.
  • Een parameter heeft een waarde die de API niet accepteert. param geeft aan welke.
  • De body bevat een veld dat dit endpoint niet accepteert.
  • Geen persona met deze persona_id op het account van de sleutel.
POST/v1/campaigns
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"
  }'
Response200
{
  "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"
}

Een campagne starten

POST/v1/campaigns/:campaign_id/startScope writeMCPset_campaign_status

Start een concept of hervat een gepauzeerde campagne. Leads stromen in en de stappen worden vanaf je X-account uitgevoerd.

Padparameters

  • campaign_idstringVerplicht
    De ID van de campagne.

Resultaat

Het campagne-object, met status op active.

Fouten

POST/v1/campaigns/:campaign_id/start
curl -X POST \
  https://gemlead.ai/api/v1/campaigns/c7RkQ2wLxe/start \
  -H "Authorization: Bearer $GEMLEAD_API_KEY"
Response200
{
  "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"
}

Een campagne pauzeren

POST/v1/campaigns/:campaign_id/pauseScope writeMCPset_campaign_status

Pauzeert een campagne. Er gaat geen nieuwe stap de deur uit tot je hem weer start, en leads behouden hun plek.

Padparameters

  • campaign_idstringVerplicht
    De ID van de campagne.

Resultaat

Het campagne-object, met status op paused.

Fouten

POST/v1/campaigns/:campaign_id/pause
curl -X POST \
  https://gemlead.ai/api/v1/campaigns/c7RkQ2wLxe/pause \
  -H "Authorization: Bearer $GEMLEAD_API_KEY"
Response200
{
  "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"
}

Een campagne archiveren

POST/v1/campaigns/:campaign_id/archiveScope writeMCPset_campaign_status

Beëindigt een campagne definitief. De geschiedenis en de gesprekken blijven bestaan, en met Een campagne dupliceren draai je hem opnieuw.

Padparameters

  • campaign_idstringVerplicht
    De ID van de campagne.

Resultaat

Het campagne-object, met status op archived.

Fouten

POST/v1/campaigns/:campaign_id/archive
curl -X POST \
  https://gemlead.ai/api/v1/campaigns/c7RkQ2wLxe/archive \
  -H "Authorization: Bearer $GEMLEAD_API_KEY"
Response200
{
  "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"
}

Een campagne dupliceren

POST/v1/campaigns/:campaign_id/duplicateScope writeMCPduplicate_campaign

Kopieert de instellingen en de flow van een campagne, zonder de leads, als nieuw concept.

Padparameters

  • campaign_idstringVerplicht
    De ID van de campagne.

Resultaat

Het nieuwe campagne-object, met status op draft.

Fouten

POST/v1/campaigns/:campaign_id/duplicate
curl -X POST \
  https://gemlead.ai/api/v1/campaigns/c7RkQ2wLxe/duplicate \
  -H "Authorization: Bearer $GEMLEAD_API_KEY"
Response200
{
  "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"
}

Een campagne verwijderen

DELETE/v1/campaigns/:campaign_idScope writeMCPdelete_campaign

Verwijdert een campagne. De leads en hun gesprekken blijven bestaan. Dit kan niet ongedaan worden gemaakt.

Padparameters

  • campaign_idstringVerplicht
    De ID van de campagne.

Resultaat

Een object met de id van de campagne en deleted op true.

Fouten

DELETE/v1/campaigns/:campaign_id
curl -X DELETE \
  https://gemlead.ai/api/v1/campaigns/c7RkQ2wLxe \
  -H "Authorization: Bearer $GEMLEAD_API_KEY"
Response200
{
  "id": "c7RkQ2wLxe",
  "object": "campaign",
  "deleted": true
}

Het object met campagnestatistieken

De resultaten van een campagne over een periode, in totaal en per dag.

Attributen

  • objectstring
    Altijd campaign_stats.
  • campaign_idstring
    De ID van de campagne.
  • fromstring
    De eerste dag, YYYY-MM-DD.
  • tostring
    De laatste dag, YYYY-MM-DD.
  • totalsobject
    leads_added, dms_sent, replies en reply_rate over de periode.
  • dailyarray van objects
    Eén regel per dag met date, dms_sent en replies.
Het object met campagnestatistieken
{
  "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
    }
  ]
}

Statistieken van een campagne ophalen

GET/v1/campaigns/:id/statsScope readMCPget_campaign_stats

Geeft de resultaten van een campagne over een periode terug, in totaal en per dag. dms_sent telt de eerste DM's die in de periode zijn verstuurd, replies de antwoorden van die leads binnen 7 dagen. Dagen zijn UTC-datums.

Padparameters

  • idstringVerplicht
    De ID van de campagne.

Queryparameters

  • fromstring
    De eerste dag, YYYY-MM-DD. Standaard 30 dagen geleden.
  • tostring
    De laatste dag, YYYY-MM-DD. Standaard vandaag.

Resultaat

Een object met campagnestatistieken.

Fouten

  • Geen campagne met deze ID op het account van de sleutel.
  • Een parameter heeft een waarde die de API niet accepteert. param geeft aan welke.
GET/v1/campaigns/:id/stats
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
Response200
{
  "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
    }
  ]
}

Het object met campagne-instellingen

De instellingen van een campagne en de volledige flow, elke stap met zijn ID en opties.

Attributen

  • objectstring
    Altijd campaign_settings.
  • campaign_idstring
    De ID van de campagne.
  • persona_idstring of null
    De persona waarvan de leads erin komen.
  • namestring
    De naam van de campagne.
  • statusstring
    Waar de campagne staat.
    draftactivepausedarchived
  • methodstring of null
    Alleen leads die op deze manier zijn gevonden, komen erin. Met null komen alle leads van de persona erin.
    followingkeywordscompetitor_followerscompetitor_comments
  • min_scoreinteger
    Alleen leads met minstens deze score komen erin, 0 tot 100.
  • daily_limitinteger
    Het maximale aantal nieuwe leads dat er per dag in komt, 5 tot 150.
  • lead_orderstring
    Welke leads er het eerst in komen. highest voor de hoogste score, lowest voor de laagste, shuffle voor willekeurig of newest voor de laatst gevonden.
    highestlowestshufflenewest
  • flowobject
    De flow van de campagne.
  • updated_atstring
    Wanneer hij voor het laatst is gewijzigd, in ISO 8601.
Het object met campagne-instellingen
{
  "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"
}

Instellingen van een campagne ophalen

GET/v1/campaigns/:campaign_id/settingsScope readMCPget_campaign_settings

Geeft de instellingen en de flow van een campagne terug, elke stap met zijn ID en opties. Lees dit voordat je de flow bewerkt.

Padparameters

  • campaign_idstringVerplicht
    De ID van de campagne.

Resultaat

Een object met campagne-instellingen.

Fouten

GET/v1/campaigns/:campaign_id/settings
curl https://gemlead.ai/api/v1/campaigns/c7RkQ2wLxe/settings \
  -H "Authorization: Bearer $GEMLEAD_API_KEY"
Response200
{
  "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"
}

Instellingen van een campagne bijwerken

PATCH/v1/campaigns/:campaign_id/settingsScope writeMCPupdate_campaign

Wijzigt de instellingen die je meestuurt en laat de rest staan. Een flow vervangt de hele flow, ook bij een lopende campagne. Behoud de ID's van de stappen die je houdt, dan blijven de leads die erop wachten daar staan, en de app verplaatst de andere.

Padparameters

  • campaign_idstringVerplicht
    De ID van de campagne.

Bodyparameters

  • namestring
    De naam van de campagne, maximaal 100 tekens.
  • methodstring of null
    Alleen leads die op deze manier zijn gevonden, komen erin, null voor alle leads van de persona.
    followingkeywordscompetitor_followerscompetitor_comments
  • min_scoreinteger
    Alleen leads met minstens deze score komen erin, 0 tot 100.
  • daily_limitinteger
    Het maximale aantal nieuwe leads dat er per dag in komt, 5 tot 150.
  • lead_orderstring
    Welke leads er het eerst in komen. highest voor de hoogste score, lowest voor de laagste, shuffle voor willekeurig of newest voor de laatst gevonden.
    highestlowestshufflenewest
  • flowobject
    De nieuwe flow, volledig.

Resultaat

Het bijgewerkte object met campagne-instellingen.

Fouten

  • Geen campagne met deze ID op het account van de sleutel.
  • Een parameter heeft een waarde die de API niet accepteert. param geeft aan welke.
  • De body bevat een veld dat dit endpoint niet accepteert.
  • Je probeert de flow van een gearchiveerde campagne te wijzigen. Dupliceer de campagne in plaats daarvan.
PATCH/v1/campaigns/:campaign_id/settings
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
  }'
Response200
{
  "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"
}

Het flow-object

De stappen die een campagne voor elke lead doorloopt, op volgorde. Een splitsing voert if_yes of if_no uit en daarna de stappen die erop volgen. Een flow heeft maximaal 60 stappen, splitsingen gaan 2 niveaus diep en stap-ID's zijn uniek. Een stap accepteert alleen de opties van zijn type. Elke like, reactie, follow en DM gaat de deur uit vanaf je X-account. Het canvas in de app geeft de flow op dezelfde manier weer als zijn eigen templates.

Attributen

  • stepsarray van objectsVerplicht
    De stappen, op volgorde.
Het flow-object
{
  "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
    }
  ]
}

Het campagnelead-object

Een lead in een campagne, de stap waar hij staat en wat de campagne voor hem plaatste.

Attributen

  • objectstring
    Altijd campaign_lead.
  • idstring of null
    Unieke ID van de doorloop van de lead in deze campagne.
  • campaign_idstring
    De ID van de campagne.
  • lead_idstring of null
    De ID van de lead.
  • statusstring
    De status van de lead in de campagne, zoals waiting, replied, completed of failed.
  • stepstring of null
    Het label van de stap waar hij staat.
  • entered_atstring of null
    Wanneer hij in de campagne kwam, in ISO 8601.
  • leadobject of null
    De lead.
  • postedobject
    Wat er voor deze lead is verstuurd.
Het campagnelead-object
{
  "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"
      }
    ]
  }
}

Leads van een campagne opvragen

GET/v1/campaigns/:campaign_id/leadsScope readMCPlist_campaign_leads

Geeft de leads van een campagne terug op basis van waar ze in de flow staan, met wat de campagne bij elke lead heeft geplaatst.

Padparameters

  • campaign_idstringVerplicht
    De ID van de campagne.

Queryparameters

  • stagestring
    all zijn alle leads die erin kwamen. step zijn de leads die de stap step_id passeerden, fork de leads die één tak ervan namen. dm_sent, replied, finished voor afgerond of beantwoord, completed voor alle stappen doorlopen zonder antwoord. Standaard all.
    allstepforkdm_sentrepliedfinishedcompleted
  • step_idstring
    Bij step of fork, de ID van de stap.
  • branchstring
    Bij fork, de tak.
    yesno
  • skippedboolean
    Bij step op een reactie- of DM-stap, de leads waarvoor die stap niets plaatste.
  • qstring
    Zoek op naam of gebruikersnaam.
  • limitinteger
    Hoeveel objecten je terugkrijgt, van 1 tot 100. Standaard 25.
  • cursorstring
    De next_cursor van de vorige pagina, om de pagina daarna op te halen. Zie Paginering.

Resultaat

Een lijst van campagnelead-objecten, met total_count.

Fouten

  • Geen campagne met deze ID op het account van de sleutel.
  • Een parameter heeft een waarde die de API niet accepteert. param geeft aan welke.
GET/v1/campaigns/:campaign_id/leads
curl -G https://gemlead.ai/api/v1/campaigns/c7RkQ2wLxe/leads \
  -H "Authorization: Bearer $GEMLEAD_API_KEY" \
  -d stage=replied
Response200
{
  "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
}

De activiteit van een campagne per dag over 14 dagen of per uur over 24 uur, zoals in de grafiek in de app.

Attributen

  • objectstring
    Altijd campaign_trends.
  • campaign_idstring
    De ID van de campagne.
  • rangestring
    De periode.
    14d24h
  • timezonestring
    De tijdzone van de intervallen.
  • bucketsarray van objects
    Eén per dag of per uur, elk met key en de gevraagde metrics.
  • totalsobject
    Sinds de start van de campagne, de started, sent, replies en follows, met last_sent_at en last_reply_at.
  • truncatedboolean
    true als de campagne te groot is om volledig te tellen.
  • generated_atstring
    Wanneer de cijfers zijn uitgelezen, in ISO 8601.
Het object met campagnetrends
{
  "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"
}
GET/v1/campaigns/:campaign_id/trendsScope readMCPget_campaign_trends

Geeft de gestarte leads, verstuurde DM's, antwoorden en follows van een campagne terug, per dag over 14 dagen of per uur over 24 uur.

Padparameters

  • campaign_idstringVerplicht
    De ID van de campagne.

Queryparameters

  • metricsstring
    Een of meer van started, sent, replies en follows, gescheiden door komma's. Standaard alle vier.
    startedsentrepliesfollows
  • rangestring
    14d per dag, 24h per uur. Standaard 14d.
    14d24h
  • timezonestring
    De IANA-tijdzone van de intervallen, zoals Europe/Paris. Standaard UTC.

Resultaat

Een object met campagnetrends.

Fouten

  • Geen campagne met deze ID op het account van de sleutel.
  • Een parameter heeft een waarde die de API niet accepteert. param geeft aan welke.
GET/v1/campaigns/:campaign_id/trends
curl -G \
  https://gemlead.ai/api/v1/campaigns/c7RkQ2wLxe/trends \
  -H "Authorization: Bearer $GEMLEAD_API_KEY" \
  -d range=14d \
  --data-urlencode "timezone=Europe/Paris"
Response200
{
  "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"
}

Het campagnetemplate-object

Een flow om een campagne mee te beginnen, zoals de app hem aanbiedt. De flow van elke template is een geldige flow voor Een campagne maken.

Attributen

  • objectstring
    Altijd campaign_template.
  • idstring
    De ID van de template, voor de parameter template.
    warm_upinstantdirect_messageblank
  • descriptionstring
    Wat de flow doet, in een paar zinnen.
  • defaultboolean
    Of de app deze template kiest voor deze methode en markt.
  • flowobject
    De flow van de campagne.
Het campagnetemplate-object
{
  "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
      }
    ]
  }
}

Campagnetemplates opvragen

GET/v1/campaign_templatesScope readMCPlist_campaign_templates

Geeft de templates van de app terug met hun volledige flows, de beste referentie voor elk staptype en elke optie. De Warm-up-flow liket, reageert en volgt vóór de DM. De Directe flow doet dat meteen en stuurt een dag later de DM. Privébericht verstuurt alleen de DM.

Queryparameters

  • methodstring
    De methode van de campagne. De Directe flow past zich daaraan aan.
    followingkeywordscompetitor_followerscompetitor_comments
  • marketstring
    De markt van de persona. In b2c verstuurt Privébericht de DM meteen, zonder Radar.
    b2bb2c

Resultaat

Een lijst van campagnetemplate-objecten.

Fouten

  • Een parameter heeft een waarde die de API niet accepteert. param geeft aan welke.
GET/v1/campaign_templates
curl -G https://gemlead.ai/api/v1/campaign_templates \
  -H "Authorization: Bearer $GEMLEAD_API_KEY" \
  -d method=following \
  -d market=b2b
Response200
{
  "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
}