Referencia de la API
Campañas
Una campaña lleva a los leads calientes de un buyer persona por un flujo de pasos, me gusta, comentarios, follows y DM, todo desde tu cuenta de X, y pasa cada respuesta a tu bandeja de entrada. Crea una a partir de una plantilla o de tu propio flujo, lánzala y sigue sus cifras.
- 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
El objeto campaign
Un flujo de prospección que envía DM a los leads calientes de un buyer persona, hace seguimiento y te pasa las respuestas a la bandeja de entrada.
Atributos
- idstringIdentificador único de la campaña.
- objectstringSiempre
campaign. - namestringEl nombre de la campaña.
- statusstringSi la campaña está enviando.
draftactivepausedarchived - personaobject o nullEl buyer persona cuyos leads entran en la campaña.
- methodstring o nullCómo se encontraron los leads de la campaña. Null en las campañas antiguas.
followingkeywordscompetitor_followerscompetitor_comments - min_scoreintegerLos leads con una puntuación inferior nunca entran en la campaña.
- daily_limitintegerEl máximo de leads nuevos que entran en la campaña al día, de 5 a 150. Por defecto 60.
- statsobjectTotales desde que empezó la campaña. Una respuesta cuenta si llega en los 7 días siguientes al primer DM.
- created_atstringCuándo se creó la campaña, en ISO 8601.
- updated_atstringCuándo cambió la campaña por última vez, en 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 campañas
Devuelve tus campañas, primero las más recientes.
Parámetros de consulta
- statusstringSolo las campañas con este estado.
draftactivepausedarchived - personastringSolo las campañas del buyer persona con este ID.
- limitintegerCuántos objetos devolver, de 1 a 100. 25 por defecto.
- cursorstringEl
next_cursorde la página anterior, para obtener la siguiente. Consulta Paginación.
Devuelve
Una lista de objetos campaign.
Errores
- Un parámetro tiene un valor que la API no acepta.
paramlo indica.
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
}Obtener una campaña
readDevuelve una campaña.
Parámetros de ruta
- idstringObligatorioEl ID de la campaña.
Devuelve
Un objeto campaign.
Errores
- No hay ninguna campaña con este ID en la cuenta de la clave.
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"
}Crear una campaña
Crea una campaña en borrador. No se envía nada hasta que la lances. Sin template ni flow, la campaña recibe la plantilla por defecto de la app, el Flujo de calentamiento para B2B y el Flujo instantáneo para B2C.
Parámetros del cuerpo
- persona_idstringObligatorioEl buyer persona cuyos leads entran en ella.
- namestringObligatorioEl nombre de la campaña, hasta 100 caracteres.
- methodstringSolo entran los leads encontrados de esta forma. Omítelo para incluir todos los leads del buyer persona.
followingkeywordscompetitor_followerscompetitor_comments - min_scoreintegerSolo entran los leads con esta puntuación o más, de 0 a 100. Por defecto 60.
- daily_limitintegerEl máximo de leads nuevos que entran al día, de 5 a 150. Por defecto 60. Cada lead nuevo empieza con Radar, que lo añade a una lista privada de X de la cuenta, y por encima de unos cientos al día X bloquea esos añadidos entre 6 y 24 horas.
- lead_orderstringQué leads entran primero. Por defecto
highest, onewestpara los métodos de palabras clave y de competidores.highestlowestshufflenewest - templatestringEl flujo del que partir. Consulta Listar plantillas de campaña. No se combina con
flow.warm_upinstantdirect_messageblank - flowobjectTu propio flujo, en lugar de una plantilla.
Devuelve
El nuevo objeto campaign, con su status en draft.
Errores
- Falta un parámetro obligatorio.
paramlo indica. - Un parámetro tiene un valor que la API no acepta.
paramlo indica. - El cuerpo tiene un campo que este endpoint no acepta.
- No hay ningún buyer persona con este
persona_iden la cuenta de la clave.
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"
}Lanzar una campaña
Lanza un borrador o reanuda una campaña en pausa. Los leads entran y los pasos salen desde tu cuenta de X.
Parámetros de ruta
- campaign_idstringObligatorioEl ID de la campaña.
Devuelve
El objeto campaign, con su status en active.
Errores
- No hay ninguna campaña con este ID en la cuenta de la clave.
- La campaña está archivada. Duplícala para volver a lanzarla.
- El flujo aún no tiene pasos.
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 una campaña
Pausa una campaña. No sale ningún paso nuevo hasta que la vuelvas a lanzar, y los leads conservan su lugar.
Parámetros de ruta
- campaign_idstringObligatorioEl ID de la campaña.
Devuelve
El objeto campaign, con su status en paused.
Errores
- No hay ninguna campaña con este ID en la cuenta de la clave.
- La campaña está archivada. Duplícala para volver a lanzarla.
- La campaña es un borrador, no hay nada que 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"
}Archivar una campaña
Termina una campaña definitivamente. Su historial y sus conversaciones se conservan, y Duplicar una campaña permite relanzarla.
Parámetros de ruta
- campaign_idstringObligatorioEl ID de la campaña.
Devuelve
El objeto campaign, con su status en archived.
Errores
- No hay ninguna campaña con este ID en la cuenta de la clave.
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 una campaña
Copia los ajustes y el flujo de una campaña, sin sus leads, como un nuevo borrador.
Parámetros de ruta
- campaign_idstringObligatorioEl ID de la campaña.
Devuelve
El nuevo objeto campaign, con su status en draft.
Errores
- No hay ninguna campaña con este ID en la cuenta de la clave.
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"
}Eliminar una campaña
Elimina una campaña. Sus leads y sus conversaciones se conservan. No se puede deshacer.
Parámetros de ruta
- campaign_idstringObligatorioEl ID de la campaña.
Devuelve
Un objeto con el id de la campaña y deleted en true.
Errores
- No hay ninguna campaña con este ID en la cuenta de la clave.
curl -X DELETE \
https://gemlead.ai/api/v1/campaigns/c7RkQ2wLxe \
-H "Authorization: Bearer $GEMLEAD_API_KEY"{
"id": "c7RkQ2wLxe",
"object": "campaign",
"deleted": true
}El objeto campaign stats
Los resultados de una campaña en un periodo, en total y día a día.
Atributos
- objectstringSiempre
campaign_stats. - campaign_idstringEl ID de la campaña.
- fromstringEl primer día,
YYYY-MM-DD. - tostringEl último día,
YYYY-MM-DD. - totalsobject
leads_added,dms_sent,repliesyreply_rateen el periodo. - dailyarray de objectsUna entrada por día con su
date,dms_sentyreplies.
{
"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
}
]
}Obtener las estadísticas de una campaña
Devuelve los resultados de una campaña en un periodo, en total y día a día. dms_sent cuenta los primeros DM enviados en el periodo, replies las respuestas de esos leads en los 7 días siguientes. Los días son fechas UTC.
Parámetros de ruta
- idstringObligatorioEl ID de la campaña.
Parámetros de consulta
- fromstringEl primer día,
YYYY-MM-DD. Por defecto, hace 30 días. - tostringEl último día,
YYYY-MM-DD. Por defecto, hoy.
Devuelve
Errores
- No hay ninguna campaña con este ID en la cuenta de la clave.
- Un parámetro tiene un valor que la API no acepta.
paramlo indica.
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
}
]
}El objeto campaign settings
Los ajustes de una campaña y su flujo completo, cada paso con su ID y sus opciones.
Atributos
- objectstringSiempre
campaign_settings. - campaign_idstringEl ID de la campaña.
- persona_idstring o nullEl buyer persona cuyos leads entran en ella.
- namestringEl nombre de la campaña.
- statusstringEn qué punto está la campaña.
draftactivepausedarchived - methodstring o nullSolo entran los leads encontrados de esta forma.
nulldeja entrar a todos los leads del buyer persona.followingkeywordscompetitor_followerscompetitor_comments - min_scoreintegerSolo entran los leads con esta puntuación o más, de 0 a 100.
- daily_limitintegerEl máximo de leads nuevos que entran al día, de 5 a 150.
- lead_orderstringQué leads entran primero.
highestla mejor puntuación,lowestla más baja,shuffleal azar onewestlos encontrados más recientemente.highestlowestshufflenewest - flowobjectSu flujo.
- updated_atstringCuándo cambió por última vez, en 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"
}Obtener los ajustes de una campaña
Devuelve los ajustes de una campaña y su flujo, cada paso con su ID y sus opciones. Léelo antes de editar el flujo.
Parámetros de ruta
- campaign_idstringObligatorioEl ID de la campaña.
Devuelve
Errores
- No hay ninguna campaña con este ID en la cuenta de la clave.
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"
}Actualizar los ajustes de una campaña
Cambia los ajustes que envías y conserva los demás. Un flow reemplaza el flujo entero, incluso en una campaña en curso. Conserva los ID de los pasos que mantienes, así los leads que esperan en ellos se quedan ahí, y la app mueve a los demás.
Parámetros de ruta
- campaign_idstringObligatorioEl ID de la campaña.
Parámetros del cuerpo
- namestringEl nombre de la campaña, hasta 100 caracteres.
- methodstring o nullSolo entran los leads encontrados de esta forma,
nullpara todos los leads del buyer persona.followingkeywordscompetitor_followerscompetitor_comments - min_scoreintegerSolo entran los leads con esta puntuación o más, de 0 a 100.
- daily_limitintegerEl máximo de leads nuevos que entran al día, de 5 a 150.
- lead_orderstringQué leads entran primero.
highestla mejor puntuación,lowestla más baja,shuffleal azar onewestlos encontrados más recientemente.highestlowestshufflenewest - flowobjectEl nuevo flujo, completo.
Devuelve
El objeto campaign settings actualizado.
Errores
- No hay ninguna campaña con este ID en la cuenta de la clave.
- Un parámetro tiene un valor que la API no acepta.
paramlo indica. - El cuerpo tiene un campo que este endpoint no acepta.
- Cambiaste el flujo de una campaña archivada. Duplícala en su lugar.
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"
}El objeto flow
Los pasos que una campaña ejecuta para cada lead, en orden. Una bifurcación ejecuta if_yes o if_no y luego los pasos que la siguen. Un flujo tiene 60 pasos como máximo, las bifurcaciones admiten 2 niveles y los ID de paso son únicos. Un paso solo acepta las opciones de su tipo. Cada me gusta, comentario, follow y DM sale de tu cuenta de X. El lienzo de la app muestra el flujo igual que sus propias plantillas.
Atributos
- stepsarray de objectsObligatorioLos pasos, en orden.
{
"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
}
]
}El objeto campaign lead
Un lead en una campaña, el paso en el que está y lo que la campaña publicó para él.
Atributos
- objectstringSiempre
campaign_lead. - idstring o nullIdentificador único del recorrido del lead en esta campaña.
- campaign_idstringEl ID de la campaña.
- lead_idstring o nullEl ID del lead.
- statusstringEl estado del lead en la campaña, como
waiting,replied,completedofailed. - stepstring o nullLa etiqueta del paso en el que está.
- entered_atstring o nullCuándo entró en la campaña, en ISO 8601.
- leadobject o nullEl lead.
- postedobjectLo que se envió a 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 los leads de una campaña
Devuelve los leads de una campaña según dónde están en el flujo, con lo que la campaña publicó para cada uno.
Parámetros de ruta
- campaign_idstringObligatorioEl ID de la campaña.
Parámetros de consulta
- stagestring
allson todos los leads que entraron.step, los que pasaron el pasostep_id, yfork, los que tomaron una de sus ramas.dm_sent,replied,finishedpara los completados o que respondieron,completedpara los que hicieron todos los pasos sin responder. Por defectoall.allstepforkdm_sentrepliedfinishedcompleted - step_idstringCon
stepofork, el ID del paso. - branchstringCon
fork, la rama.yesno - skippedbooleanCon
stepen un paso de comentario o de DM, los leads para los que no publicó nada. - qstringBusca por nombre o por nombre de usuario.
- limitintegerCuántos objetos devolver, de 1 a 100. 25 por defecto.
- cursorstringEl
next_cursorde la página anterior, para obtener la siguiente. Consulta Paginación.
Devuelve
Una lista de objetos campaign lead, con total_count.
Errores
- No hay ninguna campaña con este ID en la cuenta de la clave.
- Un parámetro tiene un valor que la API no acepta.
paramlo indica.
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
}El objeto campaign trends
La actividad de una campaña por día durante 14 días o por hora durante 24 horas, como en su gráfico de la app.
Atributos
- objectstringSiempre
campaign_trends. - campaign_idstringEl ID de la campaña.
- rangestringEl periodo.
14d24h - timezonestringLa zona horaria de los tramos.
- bucketsarray de objectsUno por día o por hora, cada uno con su
keyy las métricas pedidas. - totalsobjectDesde que empezó la campaña, sus
started,sent,repliesyfollows, conlast_sent_atylast_reply_at. - truncatedboolean
truesi la campaña es demasiado grande para contarla entera. - generated_atstringCuándo se leyeron las cifras, en 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"
}Obtener las tendencias de una campaña
Devuelve los leads iniciados, los DM enviados, las respuestas y los follows de una campaña por día durante 14 días, o por hora durante 24 horas.
Parámetros de ruta
- campaign_idstringObligatorioEl ID de la campaña.
Parámetros de consulta
- metricsstringCualquiera de
started,sent,repliesyfollows, separadas por comas. Por defecto, las cuatro.startedsentrepliesfollows - rangestring
14dpor día,24hpor hora. Por defecto14d.14d24h - timezonestringLa zona horaria IANA de los tramos, como
Europe/Paris. Por defecto UTC.
Devuelve
Errores
- No hay ninguna campaña con este ID en la cuenta de la clave.
- Un parámetro tiene un valor que la API no acepta.
paramlo indica.
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"
}El objeto campaign template
Un flujo del que partir para una campaña, tal como lo ofrece la app. El flujo de cada plantilla es un flujo válido para Crear una campaña.
Atributos
- objectstringSiempre
campaign_template. - idstringEl ID de la plantilla, para el parámetro
template.warm_upinstantdirect_messageblank - descriptionstringLo que hace el flujo, en pocas frases.
- defaultbooleanSi la app la elige para este método y este mercado.
- flowobjectSu flujo.
{
"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 plantillas de campaña
Devuelve las plantillas de la app con sus flujos completos, la mejor referencia para cada tipo de paso y cada opción. El Flujo de calentamiento da me gusta, comenta y sigue antes del DM. El Flujo instantáneo lo hace todo de golpe y envía el DM un día después. Mensaje directo solo envía el DM.
Parámetros de consulta
- methodstringEl método de la campaña. El Flujo instantáneo cambia según él.
followingkeywordscompetitor_followerscompetitor_comments - marketstringEl mercado del buyer persona. En
b2c, Mensaje directo envía al instante, sin Radar.b2bb2c
Devuelve
Una lista de objetos campaign template.
Errores
- Un parámetro tiene un valor que la API no acepta.
paramlo indica.
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
}