Referência da API
Campanhas
Uma campanha conduz os leads quentes de uma persona por um fluxo de etapas, curtidas, comentários, follows e DMs, tudo pela sua conta do X, e envia cada resposta para a sua inbox. Crie uma a partir de um modelo ou do seu próprio fluxo, inicie e acompanhe os números.
- 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
O objeto campaign
Um fluxo de prospecção que manda DMs para os leads quentes de uma persona, faz o follow-up e entrega as respostas na sua inbox.
Atributos
- idstringIdentificador único da campanha.
- objectstringSempre
campaign. - namestringO nome da campanha.
- statusstringIndica se a campanha está enviando.
draftactivepausedarchived - personaobject ou nullA persona cujos leads entram na campanha.
- methodstring ou nullComo os leads da campanha foram encontrados. Null nas campanhas mais antigas.
followingkeywordscompetitor_followerscompetitor_comments - min_scoreintegerLeads com score menor nunca entram na campanha.
- daily_limitintegerO máximo de leads novos que entram na campanha por dia, de 5 a 150. O padrão é 60.
- statsobjectOs totais desde o início da campanha. Uma resposta conta quando chega até 7 dias depois da primeira DM.
- created_atstringQuando a campanha foi criada, em ISO 8601.
- updated_atstringQuando a campanha mudou pela última vez, em 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"
}Listar campanhas
Retorna suas campanhas, das mais novas para as mais antigas.
Parâmetros de consulta
- statusstringSó as campanhas com este status.
draftactivepausedarchived - personastringSó as campanhas da persona com este ID.
- limitintegerQuantos objetos retornar, de 1 a 100. O padrão é 25.
- cursorstringO
next_cursorda página anterior, para obter a página seguinte. Veja Paginação.
Retorno
Uma lista de objetos campaign.
Erros
- Um parâmetro tem um valor que a API não aceita.
paramdiz qual.
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
}Obter uma campanha
readRetorna uma campanha.
Parâmetros de caminho
- idstringObrigatórioO ID da campanha.
Retorno
Um objeto campaign.
Erros
- Nenhuma campanha com este ID na conta da chave.
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"
}Criar uma campanha
Cria uma campanha como rascunho. Nada é enviado até você iniciar a campanha. Sem template nem flow, a campanha recebe o padrão do app, o Fluxo de aquecimento para B2B e o Fluxo instantâneo para B2C.
Parâmetros do corpo
- persona_idstringObrigatórioA persona cujos leads entram nela.
- namestringObrigatórioO nome da campanha, com até 100 caracteres.
- methodstringSó entram os leads encontrados desta forma. Omita para incluir todos os leads da persona.
followingkeywordscompetitor_followerscompetitor_comments - min_scoreintegerSó entram os leads com pelo menos este score, de 0 a 100. O padrão é 60.
- daily_limitintegerO máximo de leads novos que entram por dia, de 5 a 150. O padrão é 60. Cada lead novo começa pelo Radar, que o adiciona a uma lista privada do X da conta, e o X bloqueia essas adições por 6 a 24 horas acima de algumas centenas por dia.
- lead_orderstringQuais leads entram primeiro. O padrão é
highest, ounewestpara os métodos de palavra-chave e de concorrentes.highestlowestshufflenewest - templatestringO fluxo de partida. Veja Listar modelos de campanha. Não pode ser usado com
flow.warm_upinstantdirect_messageblank - flowobjectO seu próprio fluxo, no lugar de um modelo.
Retorno
O novo objeto campaign, com o status em draft.
Erros
- Falta um parâmetro obrigatório.
paramdiz qual. - Um parâmetro tem um valor que a API não aceita.
paramdiz qual. - O corpo tem um campo que este endpoint não aceita.
- Nenhuma persona com este
persona_idna conta da chave.
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"
}Iniciar uma campanha
Inicia um rascunho ou retoma uma campanha pausada. Os leads começam a entrar e as etapas são executadas pela sua conta do X.
Parâmetros de caminho
- campaign_idstringObrigatórioO ID da campanha.
Retorno
O objeto campaign, com o status em active.
Erros
- Nenhuma campanha com este ID na conta da chave.
- A campanha está arquivada. Duplique-a para rodá-la de novo.
- O fluxo ainda não tem etapas.
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"
}Pausar uma campanha
Pausa uma campanha. Nenhuma etapa nova é executada até você iniciar a campanha de novo, e os leads mantêm a posição deles.
Parâmetros de caminho
- campaign_idstringObrigatórioO ID da campanha.
Retorno
O objeto campaign, com o status em paused.
Erros
- Nenhuma campanha com este ID na conta da chave.
- A campanha está arquivada. Duplique-a para rodá-la de novo.
- A campanha é um rascunho, então não há nada para pausar.
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"
}Arquivar uma campanha
Encerra uma campanha de vez. O histórico e as conversas dela continuam, e Duplicar uma campanha permite rodá-la de novo.
Parâmetros de caminho
- campaign_idstringObrigatórioO ID da campanha.
Retorno
O objeto campaign, com o status em archived.
Erros
- Nenhuma campanha com este ID na conta da chave.
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"
}Duplicar uma campanha
Copia as configurações e o fluxo de uma campanha, sem os leads dela, como um novo rascunho.
Parâmetros de caminho
- campaign_idstringObrigatórioO ID da campanha.
Retorno
O novo objeto campaign, com o status em draft.
Erros
- Nenhuma campanha com este ID na conta da chave.
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"
}Excluir uma campanha
Exclui uma campanha. Os leads e as conversas deles continuam. Essa ação não pode ser desfeita.
Parâmetros de caminho
- campaign_idstringObrigatórioO ID da campanha.
Retorno
Um objeto com o id da campanha e deleted igual a true.
Erros
- Nenhuma campanha com este ID na conta da chave.
curl -X DELETE \
https://gemlead.ai/api/v1/campaigns/c7RkQ2wLxe \
-H "Authorization: Bearer $GEMLEAD_API_KEY"{
"id": "c7RkQ2wLxe",
"object": "campaign",
"deleted": true
}O objeto campaign stats
Os resultados de uma campanha num período, no total e dia a dia.
Atributos
- objectstringSempre
campaign_stats. - campaign_idstringO ID da campanha.
- fromstringO primeiro dia,
YYYY-MM-DD. - tostringO último dia,
YYYY-MM-DD. - totalsobject
leads_added,dms_sent,repliesereply_rateno período. - dailyarray de objectsUma entrada por dia com
date,dms_sentereplies.
{
"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
}
]
}Obter as estatísticas de uma campanha
Retorna os resultados de uma campanha num período, no total e dia a dia. dms_sent conta as primeiras DMs enviadas no período, replies as respostas desses leads em até 7 dias. Os dias são datas em UTC.
Parâmetros de caminho
- idstringObrigatórioO ID da campanha.
Parâmetros de consulta
- fromstringO primeiro dia,
YYYY-MM-DD. O padrão é 30 dias atrás. - tostringO último dia,
YYYY-MM-DD. O padrão é hoje.
Retorno
Erros
- Nenhuma campanha com este ID na conta da chave.
- Um parâmetro tem um valor que a API não aceita.
paramdiz qual.
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
}
]
}O objeto campaign settings
As configurações e o fluxo completo de uma campanha, cada etapa com o seu ID e as suas opções.
Atributos
- objectstringSempre
campaign_settings. - campaign_idstringO ID da campanha.
- persona_idstring ou nullA persona cujos leads entram nela.
- namestringO nome da campanha.
- statusstringEm que ponto está a campanha.
draftactivepausedarchived - methodstring ou nullSó entram os leads encontrados desta forma.
nulldeixa entrar todos os leads da persona.followingkeywordscompetitor_followerscompetitor_comments - min_scoreintegerSó entram os leads com pelo menos este score, de 0 a 100.
- daily_limitintegerO máximo de leads novos que entram por dia, de 5 a 150.
- lead_orderstringQuais leads entram primeiro.
highestpelo maior score,lowestpelo menor,shuffleem ordem aleatória ounewestpelos encontrados mais recentemente.highestlowestshufflenewest - flowobjectO fluxo dela.
- updated_atstringQuando ela mudou pela última vez, em 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"
}Obter as configurações de uma campanha
Retorna as configurações e o fluxo de uma campanha, cada etapa com o seu ID e as suas opções. Leia antes de editar o fluxo.
Parâmetros de caminho
- campaign_idstringObrigatórioO ID da campanha.
Retorno
Erros
- Nenhuma campanha com este ID na conta da chave.
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"
}Atualizar as configurações de uma campanha
Altera as configurações que você envia e mantém as outras. Um flow substitui o fluxo inteiro, mesmo numa campanha ativa. Mantenha os IDs das etapas que você conservar, assim os leads que esperam nelas continuam ali, e o app move os outros.
Parâmetros de caminho
- campaign_idstringObrigatórioO ID da campanha.
Parâmetros do corpo
- namestringO nome da campanha, com até 100 caracteres.
- methodstring ou nullSó entram os leads encontrados desta forma,
nullpara todos os leads da persona.followingkeywordscompetitor_followerscompetitor_comments - min_scoreintegerSó entram os leads com pelo menos este score, de 0 a 100.
- daily_limitintegerO máximo de leads novos que entram por dia, de 5 a 150.
- lead_orderstringQuais leads entram primeiro.
highestpelo maior score,lowestpelo menor,shuffleem ordem aleatória ounewestpelos encontrados mais recentemente.highestlowestshufflenewest - flowobjectO novo fluxo, completo.
Retorno
O objeto campaign settings atualizado.
Erros
- Nenhuma campanha com este ID na conta da chave.
- Um parâmetro tem um valor que a API não aceita.
paramdiz qual. - O corpo tem um campo que este endpoint não aceita.
- Você tentou alterar o fluxo de uma campanha arquivada. Duplique a campanha em vez disso.
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"
}O objeto flow
As etapas que uma campanha executa para cada lead, em ordem. Uma bifurcação executa if_yes ou if_no e depois as etapas seguintes. Um fluxo tem no máximo 60 etapas, as bifurcações vão até 2 níveis e os IDs das etapas são únicos. Uma etapa só aceita as opções do seu tipo. Toda curtida, comentário, follow e DM sai da sua conta do X. O canvas do app organiza o fluxo do mesmo jeito que os próprios modelos.
Atributos
- stepsarray de objectsObrigatórioAs etapas, em ordem.
{
"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
}
]
}O objeto campaign lead
Um lead numa campanha, a etapa em que ele está e o que a campanha publicou para ele.
Atributos
- objectstringSempre
campaign_lead. - idstring ou nullIdentificador único da passagem do lead por esta campanha.
- campaign_idstringO ID da campanha.
- lead_idstring ou nullO ID do lead.
- statusstringO status do lead na campanha, como
waiting,replied,completedoufailed. - stepstring ou nullO nome da etapa em que ele está.
- entered_atstring ou nullQuando ele entrou na campanha, em ISO 8601.
- leadobject ou nullO lead.
- postedobjectO que foi enviado para este lead.
{
"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"
}
]
}
}Listar os leads de uma campanha
Retorna os leads de uma campanha conforme o ponto em que estão no fluxo, com o que a campanha publicou para cada um.
Parâmetros de caminho
- campaign_idstringObrigatórioO ID da campanha.
Parâmetros de consulta
- stagestring
allsão todos os leads que entraram.stepsão os que passaram pela etapastep_id,forkos que seguiram um dos ramos dela.dm_sent,replied,finishedpara os concluídos ou que responderam,completedpara os que fizeram todas as etapas sem responder. O padrão éall.allstepforkdm_sentrepliedfinishedcompleted - step_idstringCom
stepoufork, o ID da etapa. - branchstringCom
fork, o ramo.yesno - skippedbooleanCom
stepnuma etapa de comentário ou de DM, os leads para os quais ela não publicou nada. - qstringBusca por nome ou username.
- limitintegerQuantos objetos retornar, de 1 a 100. O padrão é 25.
- cursorstringO
next_cursorda página anterior, para obter a página seguinte. Veja Paginação.
Retorno
Uma lista de objetos campaign lead, com total_count.
Erros
- Nenhuma campanha com este ID na conta da chave.
- Um parâmetro tem um valor que a API não aceita.
paramdiz qual.
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
}O objeto campaign trends
A atividade de uma campanha por dia em 14 dias ou por hora em 24 horas, como no gráfico dela no app.
Atributos
- objectstringSempre
campaign_trends. - campaign_idstringO ID da campanha.
- rangestringO período.
14d24h - timezonestringO fuso horário dos intervalos.
- bucketsarray de objectsUm por dia ou por hora, cada um com a sua
keye as métricas solicitadas. - totalsobjectDesde o início da campanha, os
started,sent,repliesefollowsdela, comlast_sent_atelast_reply_at. - truncatedboolean
truequando a campanha é grande demais para ser contada por inteiro. - generated_atstringQuando os números foram lidos, em 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"
}Obter as tendências de uma campanha
Retorna os leads iniciados, as DMs enviadas, as respostas e os follows de uma campanha por dia em 14 dias, ou por hora em 24 horas.
Parâmetros de caminho
- campaign_idstringObrigatórioO ID da campanha.
Parâmetros de consulta
- metricsstringQualquer um entre
started,sent,repliesefollows, separados por vírgula. O padrão são os quatro.startedsentrepliesfollows - rangestring
14dpor dia,24hpor hora. O padrão é14d.14d24h - timezonestringO fuso horário IANA dos intervalos, como
Europe/Paris. O padrão é UTC.
Retorno
Erros
- Nenhuma campanha com este ID na conta da chave.
- Um parâmetro tem um valor que a API não aceita.
paramdiz qual.
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"
}O objeto campaign template
Um fluxo de partida para uma campanha, como o app oferece. O fluxo de cada modelo é válido para Criar uma campanha.
Atributos
- objectstringSempre
campaign_template. - idstringO ID do modelo, para o parâmetro
template.warm_upinstantdirect_messageblank - descriptionstringO que o fluxo faz, em poucas frases.
- defaultbooleanIndica se o app escolhe este modelo para esse método e esse mercado.
- flowobjectO fluxo dela.
{
"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
}
]
}
}Listar modelos de campanha
Retorna os modelos do app com os fluxos completos, a melhor referência para cada tipo de etapa e cada opção. O Fluxo de aquecimento curte, comenta e segue antes da DM. O Fluxo instantâneo faz tudo de uma vez e manda a DM um dia depois. O modelo Mensagem direta só envia a DM.
Parâmetros de consulta
- methodstringO método da campanha. O Fluxo instantâneo varia conforme o método.
followingkeywordscompetitor_followerscompetitor_comments - marketstringO mercado da persona. Em
b2c, o modelo Mensagem direta envia na hora, sem o Radar.b2bb2c
Retorno
Uma lista de objetos campaign template.
Erros
- Um parâmetro tem um valor que a API não aceita.
paramdiz qual.
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
}